(window.webpackJsonp=window.webpackJsonp||[]).push([[0],{25:function(e,t,n){"use strict";(function(e){n.d(t,"a",function(){return o});var a=n(2),i=n(3),r=n(56),o=function(){function t(){Object(a.a)(this,t)}return Object(i.a)(t,null,[{key:"isStaging",value:function(){if("object"===typeof location&&"string"===typeof location.host){var t=location.host;return"localhost"===location.hostname&&location.port.length<=4||t.includes("192.168")||t.includes("staging")}return!("object"!==typeof e||!Object({NODE_ENV:"production",PUBLIC_URL:".",REACT_APP_LOCAL_DOCS:"true"}))&&(Object({NODE_ENV:"production",PUBLIC_URL:".",REACT_APP_LOCAL_DOCS:"true"}).STAGE||Object({NODE_ENV:"production",PUBLIC_URL:".",REACT_APP_LOCAL_DOCS:"true"}).GATSBY_STAGE)===r.a.Staging}}]),t}()}).call(this,n(35))},293:function(e,t,n){},295:function(e,t,n){},297:function(e,t,n){},299:function(e,t,n){},301:function(e,t,n){},305:function(e,t,n){},307:function(e,t,n){},309:function(e,t,n){},311:function(e,t,n){},313:function(e,t,n){},315:function(e,t,n){},318:function(e,t,n){},36:function(e,t,n){},399:function(e,t,n){},401:function(e,t,n){},403:function(e,t,n){},405:function(e,t,n){},407:function(e,t,n){},411:function(e,t,n){},413:function(e,t,n){},415:function(e,t,n){},418:function(e,t,n){},420:function(e,t,n){},424:function(e,t,n){},428:function(e,t,n){"use strict";n.r(t);var a=n(0),i=n.n(a),r=n(54),o=n(431),s=n(13),l=n(55),c=n.n(l),d=n(22),p=n.n(d),u=n(43),m=n.n(u),h=n(42),b=n.n(h),w=n(2),f=n(3),v=n(6),g=n(4),y=n(5),W=n(432),V=n(429),E=n(430),A=n(434),I=n(25),P=I.a.isStaging(),x={Contact:"https://support.vuplex.com/contact",Dashboard:P?"https://dashboard-staging.vuplex.com":"https://dashboard.vuplex.com",Developer:"https://developer.vuplex.com",Login:P?"https://login-staging.vuplex.com":"https://login.vuplex.com",Store:P?"https://store-staging.vuplex.com":"https://store.vuplex.com",Facebook:"https://www.facebook.com/vuplexbrowser/",GitHub:"https://github.com/vuplex",Twitter:"https://twitter.com/vuplex"},k=n(57),S=n.n(k),T=n(58),D=n.n(T),C=(n(293),"https://support.vuplex.com/search"),U=function(e){function t(){var e,n;Object(w.a)(this,t);for(var a=arguments.length,i=new Array(a),r=0;r<a;r++)i[r]=arguments[r];return(n=Object(v.a)(this,(e=Object(g.a)(t)).call.apply(e,[this].concat(i)))).state={value:""},n._handleInputChange=function(e){return n.setState({value:e.target.value})},n._handleKeyDown=function(e){13===e.keyCode&&n._submitSearch()},n._submitSearch=function(){n.state.value.trim().length&&(location.href="".concat(C,"?q=").concat(encodeURIComponent(n.state.value.trim())))},n}return Object(y.a)(t,e),Object(f.a)(t,[{key:"render",value:function(){return i.a.createElement("div",{className:"search-input"},i.a.createElement("input",{type:"search",placeholder:"Search documentation",value:this.state.value,onChange:this._handleInputChange,onKeyDown:this._handleKeyDown}),i.a.createElement("button",{disabled:!this.state.value.trim().length,onClick:this._submitSearch},i.a.createElement("img",{src:D.a,alt:"search"})))}}]),t}(a.Component),O=n(59),N=n.n(O);n(295);function L(){var e;location.href=(e=location.href,"".concat(x.Login,"/login?returnUrl=").concat(encodeURI(e)))}var R=n(34),M=function(e){function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"The user is not authenticated; navigating to login...";return Object(w.a)(this,t),Object(v.a)(this,Object(g.a)(t).call(this,e))}return Object(y.a)(t,e),t}(Object(R.a)(Error)),F=/vx-s=([a-z0-9]+)/i,z=function(){function e(){Object(w.a)(this,e)}return Object(f.a)(e,null,[{key:"clearSession",value:function(){this._setSessionCookie("")}},{key:"getSession",value:function(){try{var e=F.exec(document.cookie);if(!e)return null;var t=e[1];if(!t)return null;var n=atob(t);return JSON.parse(n)}catch(a){return console.warn("An error occurred while getting the session info: "+a),null}}},{key:"getSessionOrNavigateToLogin",value:function(){var t=e.getSession();if(!t)throw L(),new M;return t}},{key:"setSession",value:function(e){var t=JSON.stringify(e),n=btoa(t);this._setSessionCookie(n,1209600)}},{key:"_setSessionCookie",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=location.host.includes("vuplex.com")?"vuplex.com":void 0,a=["".concat("vx-s","=").concat(e),"path=/"];t&&a.push("max-age=".concat(t)),n&&a.push("domain=".concat(n)),document.cookie=a.join("; ")}}]),e}(),j=(n(297),function(e){function t(){var e,n;Object(w.a)(this,t);for(var a=arguments.length,i=new Array(a),r=0;r<a;r++)i[r]=arguments[r];return(n=Object(v.a)(this,(e=Object(g.a)(t)).call.apply(e,[this].concat(i)))).state={dropdownOpen:!1},n._handleClick=function(){n.setState({dropdownOpen:!n.state.dropdownOpen})},n._handleLogOutClicked=function(){z.clearSession(),location.reload()},n}return Object(y.a)(t,e),Object(f.a)(t,[{key:"render",value:function(){return i.a.createElement("div",{onClick:this._handleClick,className:"account-btn"},i.a.createElement("button",{className:"button-reset icon-container"},i.a.createElement("img",{src:N.a,alt:"account"})),this._renderDropdown())}},{key:"_renderDropdown",value:function(){if(this.state.dropdownOpen)return i.a.createElement("div",{className:"dropdown"},i.a.createElement("div",{className:"click-detector"}),i.a.createElement("a",{href:x.Dashboard},"Dashboard"),z.getSession()&&i.a.createElement("a",{onClick:this._handleLogOutClicked},"Log out"))}}]),t}(a.Component)),G=(n(299),function(e){function t(){return Object(w.a)(this,t),Object(v.a)(this,Object(g.a)(t).apply(this,arguments))}return Object(y.a)(t,e),Object(f.a)(t,[{key:"render",value:function(){var e=["navbar"];return this.props.search&&e.push("search-enabled"),this.props.className&&e.push(this.props.className),i.a.createElement("nav",{className:e.join(" ")},i.a.createElement("div",{style:this.props.centerOnly?{justifyContent:"center"}:void 0},this._renderSide(),i.a.createElement("div",{className:"nav-center"},this.props.centerLinks,i.a.createElement("div",{className:"social-links"},i.a.createElement("a",{className:"social-link",href:x.Twitter},i.a.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"512",height:"512",viewBox:"0 0 49.652 49.652"},i.a.createElement("path",{d:"M24.826 0C11.137 0 0 11.137 0 24.826c0 13.688 11.137 24.826 24.826 24.826 13.688 0 24.826-11.138 24.826-24.826C49.652 11.137 38.516 0 24.826 0zm11.075 19.144c.011.246.017.494.017.742 0 7.551-5.746 16.255-16.259 16.255-3.227 0-6.231-.943-8.759-2.565.447.053.902.08 1.363.08 2.678 0 5.141-.914 7.097-2.446a5.72 5.72 0 0 1-5.338-3.969 5.76 5.76 0 0 0 2.58-.096 5.715 5.715 0 0 1-4.583-5.603l.001-.072a5.69 5.69 0 0 0 2.587.714 5.71 5.71 0 0 1-2.541-4.755c0-1.048.281-2.03.773-2.874a16.225 16.225 0 0 0 11.777 5.972 5.707 5.707 0 0 1-.147-1.303 5.714 5.714 0 0 1 9.884-3.91 11.406 11.406 0 0 0 3.63-1.387 5.74 5.74 0 0 1-2.516 3.162 11.36 11.36 0 0 0 3.282-.899 11.494 11.494 0 0 1-2.848 2.954z",fill:"white"}))),i.a.createElement("a",{className:"social-link",href:x.Facebook},i.a.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 167.657 167.657",width:"512",height:"512"},i.a.createElement("path",{d:"M83.829.349C37.532.349 0 37.881 0 84.178c0 41.523 30.222 75.911 69.848 82.57v-65.081H49.626v-23.42h20.222V60.978c0-20.037 12.238-30.956 30.115-30.956 8.562 0 15.92.638 18.056.919v20.944l-12.399.006c-9.72 0-11.594 4.618-11.594 11.397v14.947h23.193l-3.025 23.42H94.026v65.653c41.476-5.048 73.631-40.312 73.631-83.154 0-46.273-37.532-83.805-83.828-83.805z",fill:"white"}))),i.a.createElement("a",{className:"social-link",href:x.GitHub},i.a.createElement("svg",{viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg"},i.a.createElement("path",{d:"M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12",fill:"white"}))))),this._renderRightSide()))}},{key:"_renderMenuIcon",value:function(){return this.props.mobileMenuButton.menuOpen?i.a.createElement("div",{className:"close"},"\xd7"):i.a.createElement("div",{className:"hamburger"},i.a.createElement("div",null),i.a.createElement("div",null),i.a.createElement("div",null))}},{key:"_renderMobileMenuButton",value:function(){if(this.props.mobileMenuButton)return i.a.createElement("div",{className:"menu-button",role:"button",tabIndex:0,onClick:this.props.mobileMenuButton.onClick},this._renderMenuIcon())}},{key:"_renderRightSide",value:function(){return i.a.createElement("div",{className:"nav-right"},this.props.search&&i.a.createElement(U,null),i.a.createElement(j,null))}},{key:"_renderSide",value:function(e){if(!this.props.centerOnly)return i.a.createElement("div",{className:"nav-side ".concat(e||"")},this._renderMobileMenuButton(),i.a.createElement("a",{className:"nav-logo",href:"https://vuplex.com"},i.a.createElement("img",{src:S.a,alt:"Vuplex logo"})),i.a.createElement("div",{className:"nav-slash"}),i.a.createElement("a",{className:"nav-header",href:"/"},this.props.siteName||"vuplex"))}}]),t}(a.Component)),_=(n(301),function(e){function t(){return Object(w.a)(this,t),Object(v.a)(this,Object(g.a)(t).apply(this,arguments))}return Object(y.a)(t,e),Object(f.a)(t,[{key:"render",value:function(){var e=["sidebar"];return this.props.mobileSidebarOpen&&e.push("mobile-open-container"),this.props.mobileOnly&&e.push("mobile-only-sidebar"),i.a.createElement("div",{className:e.join(" ")},i.a.createElement("aside",{className:"".concat(this.props.mobileSidebarOpen?"mobile-open":"desktop-sidebar")},this.props.children),this.props.mobileSidebarOpen&&i.a.createElement("div",{className:"mobile-sidebar-backdrop",onClick:this.props.onMobileBackdropClick}))}}]),t}(a.Component)),H=n(11);function B(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=e?"AndroidGeckoWebView":"AndroidWebView",n=e?"androidGeckoWebView":"androidWebView";return[{name:"ScriptAlerted",returns:"EventHandler<ScriptDialogEventArgs>",type:"event",description:"Event raised when a script in the page calls [window.alert()](https://developer.mozilla.org/en-US/docs/Web/API/Window/alert). If no handler is attached to this event, then `window.alert()` will return immediately and the script will continue execution. If a handler is attached to this event, then script execution will be paused until the event args' [Continue()](/webview/ScriptDialogEventArgs#Continue) callback is called.",example:"await webViewPrefab.WaitUntilInitialized();\n#if UNITY_ANDROID && !UNITY_EDITOR\n    var ".concat(n," = webViewPrefab.WebView as ").concat(t,";\n    ").concat(n,'.ScriptAlerted += (sender, eventArgs) => {\n        Debug.Log("Script alerted: " + eventArgs.Message);\n        eventArgs.Continue();\n    };\n#endif')},{name:"ScriptConfirmRequested",returns:"EventHandler<ScriptDialogEventArgs<bool>>",type:"event",description:"Event raised when a script in the page calls [window.confirm()](https://developer.mozilla.org/en-US/docs/Web/API/Window/confirm). If no handler is attached to this event, then `window.confirm()` will return `false` immediately and the script will continue execution. If a handler is attached to this event, then script execution will be paused until the event args' [Continue()](/webview/ScriptDialogEventArgs#Continue) callback is called, and `window.confirm()` will return the value passed to [Continue()](/webview/ScriptDialogEventArgs#Continue).",example:"await webViewPrefab.WaitUntilInitialized();\n#if UNITY_ANDROID && !UNITY_EDITOR\n    var ".concat(n," = webViewPrefab.WebView as ").concat(t,";\n    ").concat(n,'.ScriptConfirmRequested += (sender, eventArgs) => {\n        Debug.Log("Script confirm requested: " + eventArgs.Message);\n        eventArgs.Continue(true);\n    };\n#endif')},{name:"Pause",returns:"void",type:"method",description:"Pauses processing, media, and rendering for this webview instance until [Resume()](#Resume) is called.",example:"#if UNITY_ANDROID && !UNITY_EDITOR\n    var ".concat(n," = webViewPrefab.WebView as ").concat(t,";\n    ").concat(n,".Pause();\n#endif")},{name:"Resume",returns:"void",type:"method",description:"Resumes processing and rendering for all webview instances after a previous call to [Pause()](#Pause).",example:"#if UNITY_ANDROID && !UNITY_EDITOR\n    var ".concat(n," = webViewPrefab.WebView as ").concat(t,";\n    ").concat(n,".Resume();\n#endif")},{name:"ResumeAll",static:!0,returns:"void",type:"method",description:"Resumes processing and rendering for all webview instances after a previous call to [PauseAll()](#PauseAll). This method is automatically called by the plugin when the application resumes after being paused.",example:"#if UNITY_ANDROID && !UNITY_EDITOR\n    ".concat(t,".ResumeAll();\n#endif")},{name:"SetDrmEnabled",static:!0,returns:"void",type:"method",description:"Enables WideVine DRM. DRM is disabled by default because it could potentially be used for tracking. You can verify that DRM is enabled by using the DRM Stream Test on [this page](https://bitmovin.com/demos/drm).",example:"#if UNITY_ANDROID && !UNITY_EDITOR\n    ".concat(t,".SetDrmEnabled(true);\n#endif"),arguments:[{type:"bool",name:"enabled"}]},{name:"SetGeolocationPermissionEnabled",returns:"void",type:"method",static:!0,arguments:[{type:"bool",name:"enabled"}],description:"\nBy default, web pages cannot access the device's geolocation via JavaScript, even if the user has granted the app permission to access location. Invoking `SetGeolocationPermissionEnabled(true)` allows **all web pages** to access the geolocation if the user has granted the app location permissions via the [standard Android permission dialogs](https://developer.android.com/training/permissions/requesting).\n\nThe following Android permissions must be included in the app's [AndroidManifest.xml](https://docs.unity3d.com/Manual/android-manifest.html) and also requested by the application at runtime:\n- [`android.permission.ACCESS_COARSE_LOCATION`](https://developer.android.com/reference/android/Manifest.permission#ACCESS_COARSE_LOCATION)\n- [`android.permission.ACCESS_FINE_LOCATION`](https://developer.android.com/reference/android/Manifest.permission#ACCESS_FINE_LOCATION)",example:"#if UNITY_ANDROID && !UNITY_EDITOR\n    ".concat(t,".SetGeolocationPermissionEnabled(true);\n#endif"),warnings:["Geolocation doesn't work on Oculus devices because they lack GPS support."]},{name:"SetSurface",returns:"void",type:"method",arguments:[{type:"IntPtr",name:"surface"}],description:"\nSets the [Surface](https://developer.android.com/reference/android/view/Surface) to which the webview renders.\nThis can be used, for example, to render to an Oculus\n[OVROverlay](https://developer.oculus.com/reference/unity/1.34/class_o_v_r_overlay).\nAfter this method is called, the webview no longer renders\nto its original texture and instead renders to the given surface.",example:"await webViewPrefab.WaitUntilInitialized();\nvar surface = ovrOverlay.externalSurfaceObject;\nwebViewPrefab.Resize(ovrOverlay.externalSurfaceWidth, ovrOverlay.externalSurfaceHeight);\n#if UNITY_ANDROID && !UNITY_EDITOR\n    var ".concat(n," = webViewPrefab.WebView as ").concat(t,";\n    ").concat(n,".SetSurface(surface);\n#endif")}]}var Y,J=n(19);!function(e){e.UnityWebViewStandalone="Unity.WebView.Standalone",e.UnityWebViewAndroid="Unity.WebView.Android",e.UnityWebViewAndroidGecko="Unity.WebView.AndroidGecko",e.UnityWebViewiOS="Unity.WebView.iOS",e.UnityWebViewUwp="Unity.WebView.Uwp",e.UnityWebViewWebGL="Unity.WebView.WebGL"}(Y||(Y={}));var K,q=Y;Object.values(Y);var Q=I.a.isStaging()?"https://store-staging.vuplex.com":"https://store.vuplex.com",Z="".concat(Q,"/webview/windows-mac"),X="".concat(Q,"/webview/android"),$="".concat(Q,"/webview/android-gecko"),ee="".concat(Q,"/webview/ios"),te="".concat(Q,"/webview/uwp"),ne="".concat(Q,"/webview/webgl"),ae=(K={Overview:Q,Standalone:Z,Android:X,AndroidGecko:$,iOS:ee,Uwp:te,WebGL:ne},Object(J.a)(K,q.UnityWebViewStandalone,Z),Object(J.a)(K,q.UnityWebViewAndroid,X),Object(J.a)(K,q.UnityWebViewAndroidGecko,$),Object(J.a)(K,q.UnityWebViewiOS,ee),Object(J.a)(K,q.UnityWebViewUwp,te),Object(J.a)(K,q.UnityWebViewWebGL,ne),K),ie={name:"AndroidWebView",type:"class",description:"\nThe [IWebView](/webview/IWebView) implementation used by [3D WebView for Android](".concat(ae.Android,").\nThis class also includes extra methods for Android-specific functionality, which your application\ncan call by using the approaches described in [this support article](https://support.vuplex.com/articles/how-to-call-platform-specific-apis#android).\n"),inheritsFrom:"IWebView",additionalInterfaces:["IWithFind","IWithMovablePointer","IWithNative2DMode","IWithNativeOnScreenKeyboard","IWithPointerDownAndUp","IWithPopups","IWithSettableUserAgent"],sidebarSection:"platform",members:[].concat(Object(H.a)(B()),[{name:"RenderProcessGone",returns:"EventHandler",type:"event",description:"\nIndicates that the browser's render process terminated, either because it\ncrashed or because the operating system killed it. Note that this event only works in Android API level 26 and newer.\n\n3D WebView for Android internally uses the [android.webkit.WebView](https://developer.android.com/reference/android/webkit/WebView) system\npackage as its browser engine. Android's documentation indicates that\nthe browser's render process can terminate in some rare circumstances.\nThis RenderProcessGone event indicates when that occurs so that the application\ncan recover be destroying the existing webviews and creating new webviews.",example:'await webViewPrefab.WaitUntilInitialized();\n#if UNITY_ANDROID && !UNITY_EDITOR\n    var androidWebView = webViewPrefab.WebView as AndroidWebView;\n    androidWebView.RenderProcessGone += (sender, eventArgs) => {\n        Debug.Log("The browser process was terminated");\n    };\n#endif',seeAlso:["[android.webkit.WebViewClient.onRenderProcessGone()](https://developer.android.com/reference/android/webkit/WebViewClient#onRenderProcessGone(android.webkit.WebView,%20android.webkit.RenderProcessGoneDetail))","[Termination Handling API (Android docs)](https://developer.android.com/guide/webapps/managing-webview#termination-handle)"]},{name:"ClearHistory",returns:"void",type:"method",description:"Clears the webview's back / forward navigation history.",example:"#if UNITY_ANDROID && !UNITY_EDITOR\n    var androidWebView = webViewPrefab.WebView as AndroidWebView;\n    androidWebView.ClearHistory();\n#endif"},{name:"IsWebViewAvailable",static:!0,returns:"bool",type:"method",description:"\nIndicates whether the Android WebView package is installed on the system and available.\n\n3D WebView internally depends on Android's WebView package, which is normally installed as part of the operating system. In rare circumstances, the Android WebView package may be unavailable. For example, this can happen if the user used developer tools to delete the WebView package or if [updates to the WebView package are currently being installed](https://bugs.chromium.org/p/chromium/issues/detail?id=506369).",example:'#if UNITY_ANDROID && !UNITY_EDITOR\n    Debug.Log("WebView is available: " + AndroidWebView.IsWebViewAvailable())\n#endif'},{name:"GetNativeWebView",type:"method",returns:"AndroidJavaObject",description:"Returns the instance's native [android.webkit.WebView](https://developer.android.com/reference/android/webkit/WebView).",warnings:["Warning: Adding code that interacts with the native WebView directly may interfere with 3D WebView's functionality and vice versa. So, it's highly recommended to stick to 3D WebView's C# APIs whenever possible and only use GetNativeWebView() if truly necessary. If 3D WebView is missing an API that you need, feel free to [contact us](https://vuplex.com/contact)."],example:'#if UNITY_ANDROID && !UNITY_EDITOR\n    var androidWebView = webViewPrefab.WebView as AndroidWebView;\n    var nativeWebView = androidWebView.GetNativeWebView();\n    /// Call the android.webkit.WebView.findAll() method to search for the letter "a".\n    /// https://developer.android.com/reference/android/webkit/WebView#findAll(java.lang.String)\n    /// Most native WebView methods must be called on the Android UI thread, so do\n    /// that using com.unity3d.player.UnityPlayer.currentActivity.runOnUiThread().\n    var UnityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer");\n    var currentActivity = UnityPlayer.GetStatic<AndroidJavaObject>("currentActivity");\n    currentActivity.Call("runOnUiThread", new AndroidJavaRunnable(() => {\n        nativeWebView.Call<int>("findAll", "a");\n    }));\n#endif'},{name:"LoadHtml",returns:"void",type:"method",arguments:[{type:"string",name:"html"},{type:"string",name:"baseUrl"}],description:"Like [IWebView.LoadHtml()](/webview/IWebView#LoadHtml), but also allows a virtual base URL to be specified. Setting a base URL allows, for example, for additional resources like CSS and JavaScript files to be referenced via a relative path.",example:'// Load some HTML that references a javascript.js file\n// located in Application.persistentDataPath.\nawait webViewPrefab.WaitUntilInitialized();\n#if UNITY_ANDROID && !UNITY_EDITOR\n    var androidWebView = webViewPrefab.WebView as AndroidWebView;\n    var persistentDataPathFileUrl = "file://" + Application.persistentDataPath;\n    androidWebView.LoadHtml(\n        @"<div>\n            <script src=\'javascript.js\'><\/script>\n            <h1>Hello!</h1>\n        </div>",\n        persistentDataPathFileUrl\n    );\n#endif'},{name:"PauseAll",static:!0,returns:"void",type:"method",description:"Pauses processing, media, and rendering for all webview instances.\n\nThis method is automatically called by the plugin when the application is paused. This method internally calls [android.webkit.WebView.pauseTimers()](https://developer.android.com/reference/android/webkit/WebView#pauseTimers()), which globally affects all native webview instances. So, if your project contains other plugins that use the System WebView (for example, ad SDKs), they can be affected by this method. If you find that 3D WebView is interfering with an ad SDK or other plugin in your project that uses the System WebView, please add the scripting symbol `VUPLEX_ANDROID_DISABLE_AUTOMATIC_PAUSING` to your project to prevent 3D WebView from automatically calling this method.",example:"#if UNITY_ANDROID && !UNITY_EDITOR\n    AndroidWebView.PauseAll();\n#endif"},{name:"PostUrl",returns:"void",type:"method",arguments:[{type:"string",name:"url"},{type:"byte[]",name:"data"}],description:"Loads the given URL using an HTTP POST request and the given application/x-www-form-urlencoded data.",example:'await webViewPrefab.WaitUntilInitialized();\n#if UNITY_ANDROID && !UNITY_EDITOR\n    var androidWebView = webViewPrefab.WebView as AndroidWebView;\n    androidWebView.PostUrl("https://postman-echo.com/post", Encoding.Unicode.GetBytes("foo=bar"));\n#endif'},{name:"SetForceDark",returns:"void",type:"method",arguments:[{type:"ForceDark",name:"forceDark"}],description:"Sets the force dark mode for this WebView. Note that this API is only supported on Android API level >= 29 and is ignored in older versions of Android.",example:"await webViewPrefab.WaitUntilInitialized();\n#if UNITY_ANDROID && !UNITY_EDITOR\n    var androidWebView = webViewPrefab.WebView as AndroidWebView;\n    androidWebView.SetForceDark(ForceDark.On);\n#endif"},{name:"SetInitialScale",returns:"void",type:"method",arguments:[{type:"float",name:"scale"}],description:"Sets the initial scale for web content, where 1.0 is the default scale.",example:"await webViewPrefab.WaitUntilInitialized();\n#if UNITY_ANDROID && !UNITY_EDITOR\n    var androidWebView = webViewPrefab.WebView as AndroidWebView;\n    androidWebView.SetInitialScale(1.75f);\n#endif"},{name:"SetMixedContentMode",returns:"void",type:"method",arguments:[{type:"MixedContentMode",name:"mode"}],description:"Configures the webview's behavior when a secure origin attempts to load a resource from an insecure origin. The default mode is [MixedContentMode.CompatibilityMode.](/webview/MixedContentMode#CompatibilityMode)",example:"await webViewPrefab.WaitUntilInitialized();\n#if UNITY_ANDROID && !UNITY_EDITOR\n    var androidWebView = webViewPrefab.WebView as AndroidWebView;\n    androidWebView.SetMixedContentMode(MixedContentMode.AlwaysAllow);\n#endif"},{name:"SetNativeFileSelectionEnabled",returns:"void",type:"method",arguments:[{type:"bool",name:"enabled"}],description:'By default, a native file picker is shown for file inputs, but this method can be used to disable it. Note that the screen orientation of the native file picker UI is determined by the "Auto-rotate screen" preference in the device\'s Settings app.',example:"await webViewPrefab.WaitUntilInitialized();\n#if UNITY_ANDROID && !UNITY_EDITOR\n    var androidWebView = webViewPrefab.WebView as AndroidWebView;\n    androidWebView.SetNativeFileSelectionEnabled(false);\n#endif"},{name:"SetScrollbarsEnabled",returns:"void",type:"method",arguments:[{type:"bool",name:"enabled"}],description:"When [Native 2D Mode](https://support.vuplex.com/articles/native-2d-mode/) is enabled, this method sets whether scrollbars are enabled. The default is `true`. When Native 2D Mode is not enabled, this method has no effect.",example:"await webViewPrefab.WaitUntilInitialized();\n#if UNITY_ANDROID && !UNITY_EDITOR\n    var androidWebView = webViewPrefab.WebView as AndroidWebView;\n    androidWebView.SetScrollbarsEnabled(false);\n#endif"},{name:"SetTextZoom",returns:"void",type:"method",arguments:[{type:"int",name:"textZoom"}],description:"Sets the text zoom of the page in percent. For example, the browser engine automatically adjusts the size of web pages' text by default based on the \"Font size\" preference in the device's Settings app, but you can use `SetTextZoom(100)` to force that system font size preference to be ignored.",example:"await webViewPrefab.WaitUntilInitialized();\n#if UNITY_ANDROID && !UNITY_EDITOR\n    var androidWebView = webViewPrefab.WebView as AndroidWebView;\n    androidWebView.SetTextZoom(100);\n#endif",seeAlso:"[android.webkit.WebSettings.setTextZoom()](https://developer.android.com/reference/android/webkit/WebSettings#setTextZoom(int))"},{name:"ZoomBy",returns:"void",type:"method",arguments:[{type:"float",name:"zoomFactor"}],description:"Zooms in or out by the given factor, which is multiplied by the current zoom level to reach the new zoom level. `zoomFactor` must be in the range from 0.01 to 100.0. Note that the zoom level gets reset when a new page is loaded.",example:"// Zoom by 1.75 after the page finishes loading.\nawait webViewPrefab.WaitUntilInitialized();\nwebViewPrefab.WebView.LoadProgressChanged += (sender, eventArgs) => {\n    if (eventArgs.Type == ProgressChangeType.Finished) {\n        #if UNITY_ANDROID && !UNITY_EDITOR\n            var androidWebView = webViewPrefab.WebView as AndroidWebView;\n            androidWebView.ZoomBy(1.75f);\n        #endif\n    }\n};"}])},re={name:"AndroidGeckoWebView",type:"class",description:"\nThe [IWebView](/webview/IWebView) implementation used by [3D WebView for Android with Gecko Engine](".concat(ae.AndroidGecko,").\nThis class also includes extra methods for Android-specific functionality, which your application\ncan call by using the approaches described in [this support article](https://support.vuplex.com/articles/how-to-call-platform-specific-apis#android).\n"),inheritsFrom:"IWebView",additionalInterfaces:["IWithDownloads","IWithFileSelection","IWithFind","IWithKeyDownAndUp","IWithMovablePointer","IWithMutableAudio","IWithPointerDownAndUp","IWithPopups","IWithSettableUserAgent"],sidebarSection:"platform",members:[].concat(Object(H.a)(B(!0)),[{name:"FileSelectionRequested",returns:"EventHandler<FileSelectionEventArgs>",type:"event",description:"Indicates that the page requested a file selection dialog. This can happen, for example, when a file input is activated. Call the event args' [Continue(filePaths)](/webview/FileSelectionEventArgs#Continue) callback to provide a file selection or call [Cancel()](/webview/FileSelectionEventArgs#Cancel) to cancel file selection."},{name:"Terminated",returns:"EventHandler<TerminatedEventArgs>",type:"event",description:"Indicates that the browser process unexpectedly terminated, either because it crashed or because it was killed by the operating system. This is an unrecoverable error, so if this event occurs, the webview must be destroyed and recreated.",example:'await webViewPrefab.WaitUntilInitialized();\n#if UNITY_ANDROID && !UNITY_EDITOR\n    var androidGeckoWebView = webViewPrefab.WebView as AndroidGeckoWebView;\n    androidGeckoWebView.Terminated += (sender, eventArgs) => {\n        Debug.Log("The browser process was terminated. Reason: " + eventArgs.Type);\n    };\n#endif'},{name:"EnsureBuiltInExtension",static:!0,returns:"void",type:"method",description:"Installs an extension using GeckoView's [WebExtensionController.ensureBuiltIn()](https://mozilla.github.io/geckoview/javadoc/mozilla-central/org/mozilla/geckoview/WebExtensionController.html#ensureBuiltIn-java.lang.String-java.lang.String-) method. The extension is not re-installed if it's already present and has the same version.",arguments:[{type:"string",name:"uri"},{type:"string",name:"id"}],example:'#if UNITY_ANDROID && !UNITY_EDITOR\n    AndroidGeckoWebView.EnsureBuiltInExtension(\n        "resource://android/assets/your-extension/",\n        "example@example.com"\n    );\n#endif'},{name:"PauseAll",static:!0,returns:"void",type:"method",description:"Pauses processing, media, and rendering for all webview instances. This method is automatically called by the plugin when the application is paused.",example:"#if UNITY_ANDROID && !UNITY_EDITOR\n    AndroidGeckoWebView.PauseAll();\n#endif"},{name:"SetDebugLoggingEnabled",static:!0,returns:"void",type:"method",description:"By default, the Gecko browser engine outputs debug messages to the Logcat logs, but you can use this method to disable that. Note that this method should only be called prior to initializing any webviews.",example:"void Awake() {\n    #if UNITY_ANDROID && !UNITY_EDITOR\n        AndroidGeckoWebView.SetDebugLoggingEnabled(false);\n    #endif\n}",arguments:[{type:"bool",name:"enabled"}]},{name:"SetPreferences",static:!0,returns:"void",type:"method",arguments:[{type:"Dictionary<string, string>",name:"preferences"}],description:"Sets Gecko preferences, which can be used to optionally modify the browser engine's settings. Note that this method can only be called prior to creating any webviews.\n\nThe engine's current settings can be viewed by loading the url \"about:config\" in a webview.\nThe available Gecko preferences aren't well-documented, but the following pages list some of them:\n- [libpref's StaticPrefList.yaml](https://dxr.mozilla.org/mozilla-central/source/modules/libpref/init/StaticPrefList.yaml)\n- [libpref's all.js](https://dxr.mozilla.org/mozilla-central/source/modules/libpref/init/all.js)",example:'void Awake() {\n    #if UNITY_ANDROID && !UNITY_EDITOR\n        AndroidGeckoWebView.SetPreferences(new Dictionary<string, string> {\n            ["security.fileuri.strict_origin_policy"] = "false",\n            ["formhelper.autozoom"] = "false"\n        });\n    #endif\n}'}])},oe={name:"AuthRequestedEventArgs",type:"class",description:"Event args for `AuthRequested`. Either `Continue()` or `Cancel()` must be called in order to resume the page.",inheritsFrom:"System.EventArgs",members:[{name:"Host",returns:"string",type:"property",description:"The host that requested authentication."},{name:"Cancel",returns:"void",type:"method",description:"Declines authentication and resumes the page."},{name:"Continue",returns:"void",type:"method",description:"Sends an authentication request to the host.",arguments:[{name:"username",type:"string"},{name:"password",type:"string"}]}]},se=[{name:"InputReceived",returns:"EventHandler<EventArgs<string>>",type:"event",description:"Indicates that the user clicked a key on the keyboard."},{name:"Initialized",returns:"EventHandler",type:"event",description:"Indicates that the keyboard finished initializing."},{name:"Resolution",returns:"float",type:"property",description:"Sets the keyboard's initial resolution in pixels per Unity unit.You can change the resolution to make the keyboard's content appear larger or smaller. For more information on scaling web content, see [this support article](https://support.vuplex.com/articles/how-to-scale-web-content)."},{name:"WaitUntilInitialized",returns:"Task",type:"method",description:"Returns a task that completes when the keyboard is initialized, which means that its WebViewPrefab property is ready for use.",example:'await keyboard.WaitUntilInitialized();\nkeyboard.WebViewPrefab.Clicked += (sender, eventArgs) => {\n    Debug.Log("Keyboard was clicked");\n};'}],le={name:"CanvasKeyboard",type:"class",description:"Like the [Keyboard](/webview/Keyboard) prefab, except optimized for use in a [Canvas](https://docs.unity3d.com/2020.1/Documentation/Manual/UICanvas.html).\nYou can add a CanvasKeyboard to your scene either by dragging the CanvasKeyboard.prefab file\ninto a Canvas via the editor or by programmatically calling [CanvasKeyboard.Instantiate()](#Instantiate).\nFor an example, please see 3D WebView's CanvasWorldSpaceDemo scene.\n    ",example:"// Create a CanvasKeyboard.\nvar keyboard = CanvasKeyboard.Instantiate();\nkeyboard.transform.SetParent(canvas.transform, false);\nvar rectTransform = keyboard.transform as RectTransform;\nrectTransform.anchoredPosition3D = Vector3.zero;\nrectTransform.offsetMin = Vector2.zero;\nrectTransform.offsetMax = Vector2.zero;\nrectTransform.sizeDelta = new Vector2(650, 162);\n// Hook up the keyboard so that characters are routed to a CanvasWebViewPrefab in the scene.\nkeyboard.InputReceived += (sender, eventArgs) => {\n    canvasWebViewPrefab.WebView.SendKey(eventArgs.Value);\n};",inheritsFrom:["MonoBehaviour"],seeAlso:["[Keyboard](/webview/Keyboard)","[How does keyboard input work?](https://support.vuplex.com/articles/keyboard)"],members:[].concat(Object(H.a)(se),[{name:"WebViewPrefab",returns:"CanvasWebViewPrefab?",type:"property",propertyAccessors:{get:!0},description:"Gets the CanvasWebViewPrefab used for the keyboard UI, or `null` if the keyboard hasn't finished initializing yet. You can use [WaitUntilInitialized()](#WaitUntilInitialized) to detect when the WebViewPrefab property is ready to use.",example:'await keyboard.WaitUntilInitialized();\nkeyboard.WebViewPrefab.Clicked += (sender, eventArgs) => {\n    Debug.Log("Keyboard was clicked");\n};'},{name:"Instantiate",returns:"Keyboard",type:"method",static:!0,description:"Creates a new instance"}])};function ce(e){return"There are two ways to create a ".concat(e,":\n\n1. By dragging the ").concat(e,'.prefab file into your scene via the editor and setting its "Initial URL" property.\n2. Or by creating an instance programmatically with [').concat(e,".Instantiate()](#Instantiate), waiting for\nit to [initialize](#Initialized), and then calling methods on its [WebView](#WebView) property, like [LoadUrl()](/webview/IWebView#LoadUrl()).\n\nIf your use case requires a high degree of customization, you can instead create an IWebView\noutside of the prefab with [Web.CreateWebView()](/webview/Web#CreateWebView).")}function de(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=e?"CanvasWebViewPrefab.prefab":"WebViewPrefab.prefab",n=e?"canvasWebViewPrefab":"webViewPrefab";return[{name:"Clicked",returns:"EventHandler<ClickedEventArgs>",type:"event",description:"Indicates that the prefab was clicked. Note that the prefab automatically calls [IWebView.Click()](/webview/IWebView#Click) for you.",example:"".concat(n,'.Clicked += (sender, eventArgs) => {\n    Debug.Log("WebViewPrefab was clicked at point: " + eventArgs.Point);\n};'),warnings:e?["This event is not supported when running in [Native 2D Mode](https://support.vuplex.com/articles/native-2d-mode)."]:void 0},{name:"Initialized",returns:"EventHandler",type:"event",description:"Indicates that the prefab finished initializing, so its [WebView](#WebView) property is ready to use.",seeAlso:"[WaitUntilInitialized()](#WaitUntilInitialized)"},{name:"Scrolled",returns:"EventHandler<ScrolledEventArgs>",type:"event",description:"Indicates that the prefab was scrolled. Note that the prefab automatically calls [IWebView.Scroll()](/webview/IWebView#Scroll) for you.",example:"".concat(n,'.Scrolled += (sender, eventArgs) => {\n    Debug.Log($"WebViewPrefab was scrolled. Point: {eventArgs.Point}, scroll delta: {eventArgs.ScrollDelta}");\n};'),warnings:e?["This event is not supported when running in [Native 2D Mode](https://support.vuplex.com/articles/native-2d-mode)."]:void 0},{name:"ClickingEnabled",returns:"bool",type:"property",description:"Determines whether clicking is enabled. The default is `true`.",warnings:e?["This property is ignored when running in [Native 2D Mode](https://support.vuplex.com/articles/native-2d-mode)."]:void 0},{name:"DragThreshold",returns:"float",type:"property",description:"Determines the threshold (in web pixels) for triggering a drag. The default is `20`.\n- When the prefab's [DragMode](#DragMode) is\nset to [DragToScroll](/webview/DragMode#DragToScroll),\nthis property determines the distance that the pointer must drag before it's no longer considered a click.\n\n- When the prefab's [DragMode](#DragMode) is\nset to [DragWithinPage](/webview/DragMode#DragWithinPage),\nthis property determines the distance that the pointer must drag before it triggers a drag within the page.",warnings:e?["This property is ignored when running in [Native 2D Mode](https://support.vuplex.com/articles/native-2d-mode)."]:void 0},{name:"DragMode",returns:"DragMode",type:"property",description:"Determines how the prefab handles drag interactions.",warnings:["This property is ignored when running in [Native 2D Mode](https://support.vuplex.com/articles/native-2d-mode).","For information on the limitations of drag interactions on iOS and UWP, please see [this article](https://support.vuplex.com/articles/hover-and-drag-limitations)."],seeAlso:"[When I drag a scrollbar, why does it scroll the wrong way?](https://support.vuplex.com/articles/dragging-scrollbar)"},{name:"HoveringEnabled",returns:"bool",type:"property",description:"Determines whether hover interactions are enabled. The default is `true`.",warnings:["This property is ignored when running in [Native 2D Mode](https://support.vuplex.com/articles/native-2d-mode).","For information on the limitations of hovering on iOS and UWP, please see [this article](https://support.vuplex.com/articles/hover-and-drag-limitations)."]},{name:"InitialUrl",returns:"string",type:"property",description:"If you drag a ".concat(t," into the scene via the editor, you can set this property in the editor to make it so that the instance automatically loads the given URL after it initializes. To load a new URL at runtime, use [IWebView.LoadUrl()](/webview/IWebView#LoadUrl) instead."),seeAlso:"[How to load local files](https://support.vuplex.com/articles/how-to-load-local-files)"},{name:"LogConsoleMessages",returns:"bool",type:"property",description:"Determines whether JavaScript console messages from [IWebView.ConsoleMessageLogged](/webview/IWebView#ConsoleMessageLogged) are printed to the Unity logs. The default is `false`."},{name:"Material",returns:"Material",type:"property",propertyAccessors:{get:!0,set:!0},description:"Gets or sets the prefab's material.",warnings:e?["This property is unused when running in [Native 2D Mode](https://support.vuplex.com/articles/native-2d-mode)."]:void 0},{name:"NativeOnScreenKeyboardEnabled",returns:"bool",type:"property",description:"Determines whether the operating system's native on-screen keyboard is automatically shown when a text input in the webview is focused. The default for ".concat(e?"Canvas":"","WebViewPrefab is `").concat(e?"true":"false","`."),warnings:["The native on-screen keyboard is only supported for the following packages:\n- [3D WebView for Android](".concat(ae.Android,")\n- [3D WebView for iOS](").concat(ae.iOS,")")]},{name:"RemoteDebuggingEnabled",returns:"bool",type:"property",description:"Determines whether the prefab enables remote debugging by calling [Web.EnableRemoteDebugging()](/webview/Web#EnableRemoteDebugging). The default is `false`."},{name:"Resolution",returns:"float",type:"property",description:"Gets or sets the prefab's resolution in pixels per Unity unit. You can change the resolution to make web content appear larger or smaller. The default resolution for ".concat(e?"CanvasWebViewPrefab is `1`":"WebViewPrefab is `1300`",".\n\nSetting a lower resolution decreases the pixel density, but has the effect of making web content appear larger. Setting a higher resolution increases the pixel density, but has the effect of making content appear smaller. For more information on scaling web content, see [this support article](https://support.vuplex.com/articles/how-to-scale-web-content)."),example:"// Set the resolution to ".concat(e?"2.5":"1800","px per Unity unit.\nwebViewPrefab.Resolution = ").concat(e?"2.5f":"1800",";"),warnings:e?["Resolution cannot be changed when running in [Native 2D Mode](https://support.vuplex.com/articles/native-2d-mode)."]:void 0},{name:"ScrollingEnabled",returns:"bool",type:"property",description:"Determines whether scrolling is enabled. The default is `true`.",warnings:e?["This property is ignored when running in [Native 2D Mode](https://support.vuplex.com/articles/native-2d-mode)."]:void 0},{name:"ScrollingSensitivity",returns:"float",type:"property",description:"Determines the scroll sensitivity. The default sensitivity for ".concat(e?"CanvasWebViewPrefab is `15`":"WebViewPrefab is `0.005`","."),warnings:e?["This property is ignored when running in [Native 2D Mode](https://support.vuplex.com/articles/native-2d-mode)."]:void 0},{name:"SetPointerInputDetector",returns:"void",type:"method",arguments:[{name:"pointerInputDetector",type:"IPointerInputDetector"}],description:"By default, the prefab detects pointer input events like clicks through Unity's event system, but you can use this method to override the way that input events are detected.",example:e?"canvasWebViewPrefab.SetPointerInputDetector(yourCustomInputDetector);":"var yourCustomInputDetector = webViewPrefab.Collider.AddComponent<YourCustomInputDetector>();\nwebViewPrefab.SetPointerInputDetector(yourCustomInputDetector);"},{name:"SetOptionsForInitialization",returns:"void",type:"method",arguments:[{name:"options",type:"WebViewOptions"}],description:"Sets options that can be used to alter the webview that the prefab creates during initialization. This method can only be called prior to when the prefab initializes (i.e. directly after instantiating it or setting it to active)."},{name:"SetWebViewForInitialization",returns:"void",type:"method",arguments:[{name:"webView",type:"IWebView"}],description:"By default, the prefab creates a new IWebView during initialization. However, you can call this method before the prefab initializes to pass it an existing, initialized IWebView to use instead. This method can only be called prior to when the prefab initializes (i.e. directly after instantiating it or setting it to active)."},{name:"Visible",returns:"bool",type:"property",propertyAccessors:{get:!0,set:!0},description:"Gets or sets whether the instance is visible. The default is `true`."},{name:"WebView",returns:"IWebView?",type:"property",propertyAccessors:{get:!0},description:"Returns the prefab's IWebView instance, or `null` if the prefab hasn't finished initializing yet. To detect when the WebView property is no longer null,  please use [WaitUntilInitialized()](#WaitUntilInitialized).",example:'await webViewPrefab.WaitUntilInitialized();\n// Now the WebView property is ready.\nwebViewPrefab.WebView.LoadUrl("https://vuplex.com");'},{name:"Destroy",returns:"void",type:"method",description:"Destroys the instance and its children. Note that you don't need to call this method if you destroy the instance's parent with [Object.Destroy()](https://docs.unity3d.com/ScriptReference/Object.Destroy.html).",example:"// The webview can no longer be used after it's destroyed.\n".concat(n,".Destroy();")},{name:"Instantiate",returns:"WebViewPrefab",type:"method",static:!0,arguments:[{type:"IWebView",name:"webView"}],description:"Like [Instantiate(".concat(e?"":"float, float",")](#Instantiate), except it initializes the instance with an existing, initialized IWebView instance. This causes the ").concat(e?"CanvasWebViewPrefab":"WebViewPrefab"," to use the existing IWebView instance instead of creating a new one.")},{name:"WaitUntilInitialized",returns:"Task",type:"method",description:"Returns a task that completes when the prefab is initialized, which means that its [WebView](#WebView) property is ready for use.",example:"await ".concat(n,".WaitUntilInitialized();\n// Now the WebView property is ready.\n").concat(n,'.WebView.LoadUrl("https://vuplex.com");'),seeAlso:"[Initialized](#Initialized)"}]}var pe={name:"CanvasWebViewPrefab",type:"class",plainTextDescription:"CanvasWebViewPrefab is a prefab that makes it easy to create and interact with web content in a 2D Canvas. It takes care of creating and initializing an IWebView, displaying its texture, and handling click and scroll interactions from the user.",description:"CanvasWebViewPrefab is a prefab that makes it easy to view and interact with an [IWebView](/webview/IWebView) in a 2D [Canvas](https://docs.unity3d.com/Packages/com.unity.ugui@1.0/manual/UICanvas.html). It takes care of creating an IWebView, displaying its texture, and handling pointer interactions from the user, like clicking, dragging, and scrolling. So, all you need to do is specify a URL or HTML to load, and then the user can view and interact with it. For use outside of a Canvas, see WebViewPrefab instead. For use outside of a Canvas, see [WebViewPrefab](/webview/WebViewPrefab) instead.\n\n".concat(ce("CanvasWebViewPrefab")),inheritsFrom:["MonoBehaviour"],seeAlso:["[WebViewPrefab](/webview/WebViewPrefab)","[How clicking and scrolling works](https://support.vuplex.com/articles/clicking)","[IWebView](/webview/IWebView)","[Web (static methods)](/webview/Web)"],members:[].concat(Object(H.a)(de(!0)),[{name:"Native2DModeEnabled",returns:"bool",type:"property",description:"Enables or disables [Native 2D Mode](https://support.vuplex.com/articles/native-2d-mode), which makes it so that 3D WebView positions a native 2D webview in front of the Unity game view instead of displaying web content as a texture in the Unity scene. The default is `false`. If set to `true` and the 3D WebView package in use doesn't support Native 2D Mode, then the default rendering mode is used instead.",warnings:["Native 2D Mode is only supported for [Android (non-Gecko)](".concat(ae.Android,"), [iOS](").concat(ae.iOS,"), [WebGL](").concat(ae.WebGL,"), and [UWP](").concat(ae.Uwp,"). For the other 3D WebView packages, the default render mode is used instead."),'Native 2D Mode requires that the [canvas\'s render mode](https://docs.unity3d.com/Packages/com.unity.ugui@1.0/manual/UICanvas.html) be set to "Screen Space - Overlay".']},{name:"Instantiate",returns:"CanvasWebViewPrefab",type:"method",static:!0,description:"Creates a new instance. The [WebView](#WebView) property is available after initialization completes, which is indicated by [WaitUntilInitialized()](#WaitUntilInitialized).",example:'// Create a CanvasWebViewPrefab\nvar canvasWebViewPrefab = CanvasWebViewPrefab.Instantiate();\n// Position the prefab how we want it\nvar canvas = GameObject.Find("Canvas");\ncanvasWebViewPrefab.transform.parent = canvas.transform;\nvar rectTransform = canvasWebViewPrefab.transform as RectTransform;\nrectTransform.anchoredPosition3D = Vector3.zero;\nrectTransform.offsetMin = Vector2.zero;\nrectTransform.offsetMax = Vector2.zero;\ncanvasWebViewPrefab.transform.localScale = Vector3.one;\n// Load a URL once the prefab finishes initializing\nawait canvasWebViewPrefab.WaitUntilInitialized();\ncanvasWebViewPrefab.WebView.LoadUrl("https://vuplex.com");'},{name:"Instantiate",returns:"CanvasWebViewPrefab",type:"method",static:!0,arguments:[{type:"WebViewOptions",name:"options"}],description:"Like [Instantiate()](#Instantiate), except it also accepts an object of options flags that can be used to alter the generated webview's behavior."}])},ue="",me=null,he=null,be={};function we(){ue="",null!==me&&me.disconnect(),null!==he&&(window.clearTimeout(he),he=null)}function fe(){var e=document.getElementById(ue);return null!==e&&(e.scrollIntoView(be),we(),!0)}function ve(e){return be={behavior:e.behavior||"auto"},i.a.createElement(V.a,Object.assign({},e,{onClick:function(t){we(),e.onClick&&e.onClick(t),"string"===typeof e.to?ue=e.to.split("#").slice(1).join("#"):"object"===typeof e.to&&"string"===typeof e.to.hash&&(ue=e.to.hash.replace("#","")),""!==ue&&window.setTimeout(function(){!1===fe()&&(null===me&&(me=new MutationObserver(fe)),me.observe(document,{attributes:!0,childList:!0,subtree:!0}),he=window.setTimeout(function(){we()},1e4))},0)}}),e.children)}var ge="On Windows and macOS, this method can only be called after one or more webviews have been initialized.",ye="For [2D WebView for WebGL](https://store.vuplex.com/webview/webgl), this API is often disabled due to browser limitations. For more information, please see [this article](https://support.vuplex.com/articles/webgl-limitations).",We="[2D WebView for WebGL](https://store.vuplex.com/webview/webgl) doesn't support this API due to browser limitations. For more information, please see [this article](https://support.vuplex.com/articles/webgl-limitations).",Ve="This method can only be called prior to initializing any webviews. So, you will likely need to call it from Awake().",Ee="On Windows and macOS, this method can only be called prior to initializing any webviews. So, you will likely need to call it from Awake().",Ae=[ie,re,oe,le,pe,{name:"ClickedEventArgs",type:"class",description:"Event args for [Clicked](/webview/WebViewPrefab#Clicked).",inheritsFrom:"System.EventArgs",members:[{name:"Point",returns:"Vector2",type:"property",description:"The [normalized point](https://support.vuplex.com/articles/normalized-points) that was passed to [IWebView.Click()](/webview/IWebView#Click)."}]},{name:"ConsoleMessageEventArgs",type:"class",description:"Event args for [ConsoleMessageLogged](/webview/IWebView#ConsoleMessageLogged).",inheritsFrom:"System.EventArgs",members:[{name:"Level",returns:"ConsoleMessageLevel",type:"property",description:"The message's log level."},{name:"Message",returns:"string",type:"property",description:"The message logged to the JavaScript console."},{name:"Source",returns:"string?",type:"property",description:"The name of the file from which the message was logged, or `null` if the source is unknown."},{name:"Line",returns:"int",type:"property",description:"The line number of the file from which the message was logged, or `0` if the source is unknown."}]},{name:"ConsoleMessageLevel",type:"enum",description:"Levels for messages logged to the JavaScript console.",members:[{name:"Debug",type:"value",description:""},{name:"Error",type:"value",description:""},{name:"Log",type:"value",description:""},{name:"Warning",type:"value",description:""}]},{name:"Cookie",type:"class",description:"An HTTP [cookie](https://developer.mozilla.org/en-US/docs/Web/HTTP/Cookies).",members:[{name:"Name",returns:"string",type:"property",description:"The name of the cookie."},{name:"Value",returns:"string",type:"property",description:"The value of the cookie."},{name:"Domain",returns:"string",type:"property",description:'The domain to which the cookie belongs (e.g. "www.vuplex.com", "example.com").'},{name:"Path",returns:"string",type:"property",description:'The URL path of the cookie (e.g. "/", "/products/1234").'},{name:"ExpirationDate",returns:"int",type:"property",description:"A number representing the expiration date of the cookie as the number of seconds since the UNIX epoch, or 0 if there is no expiration date. An expiration date is not provided for session cookies."},{name:"HttpOnly",returns:"bool",type:"property",description:"Indicates whether the cookie is marked as HttpOnly (i.e. the cookie is inaccessible to client-side scripts)."},{name:"Secure",returns:"bool",type:"property",description:"Indicates whether cookie is marked as secure (i.e. its scope is limited to secure channels, typically HTTPS)."},{name:"IsValid",returns:"bool",type:"property",description:"Indicates whether the cookie is valid."}]},{name:"DownloadChangedEventArgs",type:"class",description:"Event args for [IWithDownloads.DownloadProgressChanged](/webview/IWithDownloads#DownloadProgressChanged).",inheritsFrom:"System.EventArgs",members:[{name:"ContentType",returns:"string?",type:"property",description:"The mime type indicated by the Content-Type response header, or `null` if no content type was specified."},{name:"FilePath",returns:"string",type:"property",description:"The full file path of the downloaded file. Files are downloaded to [Application.temporaryCachePath](https://docs.unity3d.com/ScriptReference/Application-temporaryCachePath.html), but you can move them to a different location after they finish downloading."},{name:"Id",returns:"string",type:"property",description:"An identifier for the file, which can be used to track the file's download progress across multiple invocations of the DownloadProgressChanged event."},{name:"Progress",returns:"float",type:"property",description:"The estimated download progress, normalized to a float between 0 and 1. Note that not all platforms support intermediate progress updates."},{name:"Type",returns:"ProgressChangeType",type:"property",description:"The download progress event type. Note that not all platforms support the [Updated](/webview/ProgressChangeType#Updated) event type."},{name:"Url",returns:"string",type:"property",description:"The URL from which the file was downloaded."}]},{name:"DragMode",type:"enum",plainTextDescription:"Options for how drag interactions affect WebViewPrefab and CanvasWebViewPrefab.",description:i.a.createElement("div",null,i.a.createElement("p",null,"Options for how drag interactions affect ",i.a.createElement(ve,{to:"/webview/WebViewPrefab"},i.a.createElement("code",null,"WebViewPrefab")),"and ",i.a.createElement(ve,{to:"/webview/CanvasWebViewPrefab"},i.a.createElement("code",null,"CanvasWebViewPrefab")),".")),members:[{name:"DragToScroll",type:"value",description:"Drag interactions trigger scrolling (default)."},{name:"DragWithinPage",type:"value",description:"Drag interactions trigger dragging within the web page (e.g. drag-and-drop, dragging to select text).",warnings:["This mode only works for webview implementations that support the [`IWithPointerDownAndUp`](/webview/IWithPointerDownAndUp) interface (i.e. [Android](/webview/AndroidWebView), [Android Gecko](/webview/AndroidGeckoWebView), [Windows](/webview/StandaloneWebView), and [macOS](/webview/StandaloneWebView))."]},{name:"Disabled",type:"value",description:"Drag interactions have no effect."}]},{name:"EventArgs",type:"class",description:"A generic version of [System.EventArgs](https://docs.microsoft.com/en-us/dotnet/api/system.eventargs).",inheritsFrom:"System.EventArgs",members:[{name:"Value",returns:"T",type:"property",description:"The wrapped value."}]},{name:"FileSelectionEventArgs",type:"class",description:"Event args for [`FileSelectionRequested`](/webview/IWithFileSelection#FileSelectionRequested). To handle file selection, the application must either call [`Continue()`](#Continue) to select files or call [`Cancel()`](#Cancel) to cancel file selection.",inheritsFrom:"System.EventArgs",members:[{name:"AcceptFilters",returns:"string[]",type:"property",description:"Filters provided by the page to specify the allowed file types. If the page didn't specify any file types, then this array is empty.",seeAlso:"[MDN's documentation for the file input `accept` attribute](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/file#accept)."},{name:"MultipleAllowed",returns:"bool",type:"property",description:"Filters provided by the page to specify the allowed file types.",seeAlso:"[MDN's documentation for the file input `multiple` attribute](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/file#multiple)."},{name:"Continue",returns:"void",type:"method",description:"To select files, call this callback with an array of one or more absolute file paths.",arguments:[{name:"filePaths",type:"string[]"}]},{name:"Cancel",returns:"void",type:"method",description:"Call this callback to cancel file selection."}]},{name:"FindResult",type:"struct",description:"The result of a call to [IWithFind.Find()](/webview/IWithFind#Find).",members:[{name:"CurrentMatchIndex",returns:"int",type:"property",description:"The index of the current highlighted match."},{name:"MatchCount",returns:"int",type:"property",description:"The total number of matches for the given text."}]},{name:"FocusedInputFieldChangedEventArgs",type:"class",description:"Event args for [`FocusedInputFieldChanged`](/webview/IWebView#FocusedInputFieldChanged).",inheritsFrom:"System.EventArgs",members:[{name:"Type",returns:"FocusedInputFieldType",type:"property",description:"The type of input field focused."}]},{name:"FocusedInputFieldType",type:"enum",description:"Indicates the type of input field focused.",members:[{name:"Text",type:"value",description:"Indicates that a text input field is focused. Examples of a text input field include an `input` element, a `textarea` element, and an element with a `contentEditable` attribute."},{name:"None",type:"value",description:"Indicates that no input field is focused."}]},{name:"ForceDark",type:"enum",description:"Values for [AndroidWebView.SetForceDark()](/webview/AndroidWebView#SetForceDark).",members:[{name:"Off",type:"value",description:"Disable force dark, irrespective of the force dark mode of the webview parent. In this mode, webview content will always be rendered as-is, regardless of whether native views are being automatically darkened."},{name:"Auto",type:"value",description:"Enable force dark dependent on the state of the webview parent view. If the webview parent view is being automatically force darkened (see: [View.setForceDarkAllowed()](https://developer.android.com/reference/android/view/View#setForceDarkAllowed(boolean))), then webview content will be rendered so as to emulate a dark theme. Webviews that are not attached to the view hierarchy will not be inverted."},{name:"On",type:"value",description:"Unconditionally enable force dark. In this mode webview content will always be rendered so as to emulate a dark theme."}]},{name:"iOSWebView",type:"class",description:"The [IWebView](/webview/IWebView) implementation used by [3D WebView for iOS](".concat(ae.iOS,"). This class also includes extra methods for iOS-specific functionality"),inheritsFrom:"IWebView",additionalInterfaces:["IWithFallbackVideo","IWithMovablePointer","IWithPointerDownAndUp","IWithNative2DMode","IWithNativeOnScreenKeyboard","IWithSettableUserAgent"],sidebarSection:"platform",members:[{name:"GetNativeWebView",type:"method",returns:"IntPtr",description:"Returns a pointer to the instance's native [WKWebView](https://developer.apple.com/documentation/webkit/wkwebview?language=objc).",warnings:["Adding code that interacts with the native WKWebView directly may interfere with 3D WebView's functionality and vice versa. So, it's highly recommended to stick to 3D WebView's C# APIs whenever possible and only use GetNativeWebView() if truly necessary. If 3D WebView is missing an API that you need, feel free to [contact us](https://vuplex.com/contact)."]},{name:"SetAllowsBackForwardNavigationGestures",type:"method",returns:"void",arguments:[{name:"allow",type:"bool"}],description:"Sets whether horizontal swipe gestures trigger backward and forward page navigation. The default is `false`.",example:"await webViewPrefab.WaitUntilInitialized();\n#if UNITY_IOS && !UNITY_EDITOR\n    var iOSWebViewInstance = webViewPrefab.Webview as iOSWebView;\n    iOSWebViewInstance.SetAllowsBackForwardNavigationGestures(true);\n#endif",seeAlso:"[WKWebView.allowsBackForwardNavigationGestures](https://developer.apple.com/documentation/webkit/wkwebview/1414995-allowsbackforwardnavigationgestu)"},{name:"SetAllowsInlineMediaPlayback",type:"method",static:!0,returns:"void",arguments:[{name:"allow",type:"bool"}],description:"Sets whether HTML5 videos play inline or use the native full-screen controller. The default is `true`. This method is static because the WKWebView's configuration cannot be modified at runtime after the webview is created.",example:"#if UNITY_IOS && !UNITY_EDITOR\n    iOSWebView.SetAllowsInlineMediaPlayback(false);\n#endif",seeAlso:"[WKWebViewConfiguration.allowsInlineMediaPlayback](https://developer.apple.com/documentation/webkit/wkwebviewconfiguration/1614793-allowsinlinemediaplayback)"},{name:"SetLongPressGesturesEnabled",type:"method",returns:"void",arguments:[{name:"enabled",type:"bool"}],description:"When [Native 2D Mode](https://support.vuplex.com/articles/native-2d-mode) is enabled, this method sets whether long press gestures are enabled. The default is `true`. When Native 2D Mode is not enabled, this method has no effect.",example:"await webViewPrefab.WaitUntilInitialized();\n#if UNITY_IOS && !UNITY_EDITOR\n    var iOSWebViewInstance = webViewPrefab.WebView as iOSWebView;\n    iOSWebViewInstance.SetLongPressGesturesEnabled(false);\n#endif"},{name:"SetScrollViewBounces",type:"method",returns:"void",arguments:[{name:"bounces",type:"bool"}],description:"When [Native 2D Mode](https://support.vuplex.com/articles/native-2d-mode) is enabled, this method sets whether the scroll view bounces past the edge of content and back again. The default is `true`. When Native 2D Mode is not enabled, this method has no effect.",example:"await webViewPrefab.WaitUntilInitialized();\n#if UNITY_IOS && !UNITY_EDITOR\n    var iOSWebViewInstance = webViewPrefab.Webview as iOSWebView;\n    iOSWebViewInstance.SetScrollViewBounces(false);\n#endif",seeAlso:"[UIScrollView.bounces](https://developer.apple.com/documentation/uikit/uiscrollview/1619420-bounces)"},{name:"SetTargetFrameRate",type:"method",returns:"void",arguments:[{name:"targetFrameRate",type:"uint"}],description:"Sets the target web frame rate. The default is `30`, which is also the maximum value. This method can be used to lower the target web frame rate in order to decrease energy and CPU usage. 3D WebView's rendering speed is limited by the speed of the underlying iOS APIs, so the actual web frame rate achieved is always lower than the default target of 30 FPS. This method is only used for the default render mode and is ignored when [Native 2D Mode](https://support.vuplex.com/articles/native-2d-mode) is enabled.",example:"await webViewPrefab.WaitUntilInitialized();\n#if UNITY_IOS && !UNITY_EDITOR\n    var iOSWebViewInstance = webViewPrefab.WebView as iOSWebView;\n    iOSWebViewInstance.SetTargetFrameRate(15);\n#endif"}]},{name:"ICookieManager",type:"interface",plainTextDescription:"Provides methods for getting, setting, and deleting HTTP cookies. You can access the ICookieManager via Web.CookieManager.",description:"Provides methods for getting, setting, and deleting [HTTP cookies](https://developer.mozilla.org/en-US/docs/Web/HTTP/Cookies). You can access the ICookieManager via [Web.CookieManager](/webview/Web#CookieManager).\n\nWhen developing code that interacts with cookies, it may also be helpful to view a webview's cookies using [remote debugging](https://support.vuplex.com/articles/how-to-debug-web-content).",members:[{name:"DeleteCookies",returns:"Task<bool>",type:"method",arguments:[{name:"url",type:"string"},{name:"cookieName",type:"string",defaultValue:"null"}],description:"Deletes all of the cookies that match the given URL and returns a\nTask&lt;bool&gt; indicating whether the deletion succeeded. A `cookieName`\ncan be optionally passed as a second parameter to further filter\nto a specific cookie.\nIf a deletion fails, it could be because the URL was invalid.\nFor more details regarding a failure, check the Unity logs.",example:'if (Web.CookieManager == null) {\n    Debug.Log("Web.CookieManager isn\'t supported on this platform.");\n    return;\n}\n// Delete all the cookies for this cookie test page, which will reset the test.\nvar succeeded = await Web.CookieManager.DeleteCookies("http://www.whatarecookies.com/cookietest.asp");\nDebug.Log("Cookie deletion succeeded: " + succeeded);',warnings:[ge,"On Windows and macOS, if this method is called without a `cookieName` it only deletes cookies that were set without an explicit Domain attribute."]},{name:"GetCookies",returns:"Task<Cookie[]>",type:"method",arguments:[{name:"url",type:"string"},{name:"cookieName",type:"string",defaultValue:"null"}],description:"Gets all of the cookies that match the given URL. A `cookieName` can be optionally passed as a second parameter to further filter results to a specific cookie.",example:'if (Web.CookieManager == null) {\n    Debug.Log("Web.CookieManager isn\'t supported on this platform.");\n    return;\n}\n// Get the cookie named "NID" set by google.com.\nvar cookies = await Web.CookieManager.GetCookies("https://www.google.com", "NID");\nif (cookies.Length > 0) {\n    Debug.Log("Cookie: " + cookies[0]);\n} else {\n    Debug.Log("Cookie not found.");\n}',warnings:[ge,"On Android, the cookies returned only have their Name and Value fields set, and the other fields are set to their default values."]},{name:"SetCookie",returns:"Task<bool>",type:"method",arguments:[{name:"cookie",type:"Cookie"}],description:"Sets the given cookie and returns a Task&lt;bool&gt; indicating whether the cookie was set successfully. If setting the cookie fails, it could be because the data in the provided Cookie was malformed. For more details regarding a failure, please check the Unity logs.",example:'if (Web.CookieManager == null) {\n    Debug.Log("Web.CookieManager isn\'t supported on this platform.");\n    return;\n}\nvar success = await Web.CookieManager.SetCookie(new Cookie {\n    Domain = "vuplex.com",\n    Path = "/",\n    Name = "example_name",\n    Value = "example_value",\n    Secure = true,\n    // Expire one day from now\n    ExpirationDate = (int)DateTimeOffset.Now.ToUnixTimeSeconds() + 60 * 60 * 24\n});',warnings:[ge]}]},{name:"IPointerInputDetector",type:"interface",plainTextDescription:"An interface that can be passed to WebViewPrefab.SetPointerInputDetector() or CanvasWebViewPrefab.SetPointerInputDetector() to override how the prefab detects pointer input. For example implementations of this interface, please see 3D WebView's DefaultPointerInputDetector.cs and CanvasPointerInputDetector.cs scripts.",description:"An interface that can be passed to [WebViewPrefab.SetPointerInputDetector()](/webview/WebViewPrefab#SetPointerInputDetector) or [CanvasWebViewPrefab.SetPointerInputDetector()](/webview/WebViewPrefab#SetPointerInputDetector) to override how the prefab detects pointer input. For example implementations of this interface, please see 3D WebView's DefaultPointerInputDetector.cs and CanvasPointerInputDetector.cs scripts.",members:[{name:"BeganDrag",returns:"EventHandler<EventArgs<Vector2>>",type:"event",description:"Indicates the [normalized point](https://support.vuplex.com/articles/normalized-points) for the beginning of a drag interaction."},{name:"Dragged",returns:"EventHandler<EventArgs<Vector2>>",type:"event",description:"Indicates the [normalized point](https://support.vuplex.com/articles/normalized-points) for the continuation of a drag interaction."},{name:"PointerDown",returns:"EventHandler<PointerEventArgs>",type:"event",description:"Indicates a pointer down interaction occurred."},{name:"PointerExited",returns:"EventHandler",type:"event",description:"Indicates that the pointer exited."},{name:"PointerMoved",returns:"EventHandler<EventArgs<Vector2>>",type:"event",description:"Indicates the [normalized point](https://support.vuplex.com/articles/normalized-points) where the pointer moved."},{name:"PointerUp",returns:"EventHandler<PointerEventArgs>",type:"event",description:"Indicates a pointer up interaction occurred."},{name:"Scrolled",returns:"EventHandler<ScrolledEventArgs>",type:"event",description:"Indicates a scroll interaction occurred."},{name:"PointerMovedEnabled",returns:"bool",type:"property",description:"The prefab sets this property to indicate whether the [PointerMoved](#PointerMoved) event should be enabled."}]},{name:"IWebView",type:"interface",plainTextDescription:"IWebView is the primary interface for loading and interacting with web content. It contains methods and properties for common browser-related functionality, like LoadUrl(), GoBack(), Reload(), and ExecuteJavaScript().",description:"IWebView is the primary interface for loading and interacting with web content. It contains methods and properties for common browser-related functionality, like [LoadUrl()](#LoadUrl), [GoBack()](#GoBack), [Reload()](#Reload), and [ExecuteJavaScript()](#ExecuteJavaScript).\n\nTo create an IWebView, instantiate a [WebViewPrefab](/webview/WebViewPrefab) or [CanvasWebViewPrefab](/webview/CanvasWebViewPrefab). After the prefab is [initialized](/webview/WebViewPrefab#Initialized), you can access its IWebView via the [WebViewPrefab.WebView](/webview/WebViewPrefab#WebView) property. If your use case requires a high degree of customization, you can instead create an IWebView outside of a prefab (to connect to your own custom GameObject) by using [Web.CreateWebView()](/webview/Web#CreateWebView).\n\nFor additional functionality, you can cast an IWebView to an [interface for a specific feature](http://localhost:3000/webview/additional-interfaces), like [IWithDownloads](/webview/IWithDownloads) or [IWithPopups](IWithPopups). For a list of additional feature interfaces and information about how to use them, see [this page](http://localhost:3000/webview/additional-interfaces).\n  ",seeAlso:["[WebViewPrefab](/webview/WebViewPrefab)","[CanvasWebViewPrefab](/webview/CanvasWebViewPrefab)","[Web (static methods)](/webview/Web)"],members:[{name:"CloseRequested",returns:"EventHandler",type:"event",description:"Indicates that the page has requested to close (i.e. via [window.close()](https://developer.mozilla.org/en-US/docs/Web/API/Window/close)).",example:'await webViewPrefab.WaitUntilInitialized();\nwebViewPrefab.WebView.CloseRequested += (sender, eventArgs) => {\n    Debug.Log("Close requested");\n};',warnings:[ye]},{name:"ConsoleMessageLogged",returns:"EventHandler<ConsoleMessageEventArgs>",type:"event",description:"Indicates that a message was logged to the JavaScript console.",example:'await webViewPrefab.WaitUntilInitialized();\nwebViewPrefab.WebView.ConsoleMessageLogged += (sender, eventArgs) => {\n    Debug.Log($"Console message logged: [{eventArgs.Level}] {eventArgs.Message}");\n};',seeAlso:"[WebViewPrefab.LogConsoleMessages](/webview/WebViewPrefab#LogConsoleMessages)",warnings:[ye]},{name:"FocusedInputFieldChanged",returns:"EventHandler<FocusedInputFieldChangedEventArgs>",type:"event",description:"Indicates that an input field was focused or unfocused. This can be used, for example, to determine when to show or hide an on-screen keyboard. This event is also raised when a focused input field is clicked subsequent times. Note that this event is currently only fired for input fields focused in the main frame and is not fired for input fields in [iframes](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe).",example:'await webViewPrefab.WaitUntilInitialized();\nwebViewPrefab.WebView.FocusedInputFieldChanged += (sender, eventArgs) => {\n    Debug.Log("Focused input field changed. Text input is focused: " + eventArgs.Type == FocusedInputFieldType.Text);\n};',warnings:[ye]},{name:"LoadProgressChanged",returns:"EventHandler<ProgressChangedEventArgs>",type:"event",description:"Indicates that the page load progress changed.",example:'await webViewPrefab.WaitUntilInitialized();\nwebViewPrefab.WebView.LoadProgressChanged += (sender, eventArgs) => {\n    Debug.Log($"Load progress changed: {eventArgs.Type}, {eventArgs.Progress}");\n    if (eventArgs.Type == ProgressChangeType.Finished) {\n        Debug.Log("The page finished loading");\n    }\n};',warnings:["On Windows and macOS, this event isn't raised for intermediate load progress ([ProgressChangeType.Updated](/webview/ProgressChangeType#Updated)) because Chromium doesn't provide an API for estimated load progress.","For [2D WebView for WebGL](https://store.vuplex.com/webview/webgl), LoadProgressChanged only indicates the ProgressChangeType.Started and Finished events, and it's unable to indicate the Failed or Updated events."],seeAlso:"[WaitForNextPageLoadToFinish()](#WaitForNextPageLoadToFinish)"},{name:"MessageEmitted",returns:"EventHandler<EventArgs<string>>",type:"event",description:"Indicates that JavaScript running in the page used the `window.vuplex.postMessage` JavaScript API to emit a message to the Unity application. For more details, please see [this support article](https://support.vuplex.com/articles/how-to-send-messages-from-javascript-to-c-sharp).",example:'await webViewPrefab.WaitUntilInitialized();\n// Add JavaScript to the page that sends a message.\nwebViewPrefab.WebView.PageLoadScripts.Add(@"\n    window.vuplex.postMessage(\'Hello from JavaScript!\');\n");\nwebViewPrefab.WebView.MessageEmitted += (sender, eventArgs) => {\n    Debug.Log("Message received from JavaScript: " + eventArgs.Value);\n};',seeAlso:["[ExecuteJavaScript](#ExecuteJavaScript)","[PageLoadScripts](#PageLoadScripts)"]},{name:"PageLoadFailed",returns:"EventHandler",type:"event",description:"Indicates that the page failed to load. This can happen, for instance, if DNS is unable to resolve the hostname.",example:'await webViewPrefab.WaitUntilInitialized();\nwebViewPrefab.WebView.PageLoadFailed += (sender, eventArgs) => {\n    Debug.Log("Page load failed");\n};',warnings:[We]},{name:"TitleChanged",returns:"EventHandler<EventArgs<string>>",type:"event",description:"Indicates that the page's title changed.",example:'await webViewPrefab.WaitUntilInitialized();\nwebViewPrefab.WebView.TitleChanged += (sender, eventArgs) => {\n    Debug.Log("Page title changed: " + eventArgs.Value);\n};',seeAlso:"[Title](#Title)",warnings:[ye]},{name:"UrlChanged",returns:"EventHandler<UrlChangedEventArgs>",type:"event",description:"Indicates that the URL of the webview changed, either due to user interaction or JavaScript.",example:'await webViewPrefab.WaitUntilInitialized();\nwebViewPrefab.WebView.UrlChanged += (sender, eventArgs) => {\n    Debug.Log("URL changed: " + eventArgs.Url);\n};',seeAlso:"[Url](#Url)",warnings:[ye]},{name:"IsDisposed",returns:"bool",type:"property",propertyAccessors:{get:!0},description:"Gets a value indicating whether the instance has been disposed via [Dispose()](#Dispose)."},{name:"IsInitialized",returns:"bool",type:"property",propertyAccessors:{get:!0},description:"Gets a value indicating whether the instance has been initialized via [Init()](#Init)."},{name:"PageLoadScripts",returns:"List<string>",type:"property",propertyAccessors:{get:!0},description:"Gets a list of JavaScript scripts that are automatically executed in every new page that is loaded.\n\nThis list is empty by default, but the application can add scripts. When used in conjunction with 3D WebView's [message passing API](https://support.vuplex.com/articles/how-to-send-messages-from-javascript-to-c-sharp), it's possible to modify the browser's behavior in significant ways, similar to creating browser extensions.",example:"\n// Add a script that automatically hides all scrollbars.\nawait webViewPrefab.WaitUntilInitialized();\nwebViewPrefab.WebView.PageLoadScripts.Add(@\"\n    var styleElement = document.createElement('style');\n    styleElement.innerText = 'body::-webkit-scrollbar { display: none; }';\n    document.head.appendChild(styleElement);\n\");\n",seeAlso:["[ExecuteJavaScript](#ExecuteJavaScript)","[JS-to-C# message passing](https://support.vuplex.com/articles/how-to-send-messages-from-javascript-to-c-sharp)"],warnings:[ye]},{name:"PluginType",returns:"WebPluginType",type:"property",propertyAccessors:{get:!0},example:'await webViewPrefab.WaitUntilInitialized();\nDebug.Log("Plugin type: " + webViewPrefab.WebView.PluginType);',description:"Gets the instance's plugin type."},{name:"Size",returns:"Vector2Int",type:"property",propertyAccessors:{get:!0},description:"Gets the webview's size in pixels.",example:'await webViewPrefab.WaitUntilInitialized();\nDebug.Log("Size: " + webViewPrefab.WebView.Size);',seeAlso:["[Resize](#Resize)"]},{name:"Texture",returns:"Texture2D?",type:"property",propertyAccessors:{get:!0},description:"\nGets the texture for the webview's web content, or `null` if running in [Native 2D Mode](https://support.vuplex.com/articles/native-2d-mode). In order to render the texture, the application must use a Material created with [CreateMaterial()](#CreateMaterial). Note that the Material returned by CreateMaterial() already has its `mainTexture` set to this Texture property.\n\nThis texture is an \"external texture\" created with [Texture2D.CreateExternalTexture()](https://docs.unity3d.com/ScriptReference/Texture2D.CreateExternalTexture.html). An undocumented characteristic of external textures in Unity is that not all Texture2D methods work for them. For example, [Texture2D.GetRawTextureData()](https://docs.unity3d.com/ScriptReference/Texture2D.GetRawTextureData.html) and [ImageConversion.EncodeToPNG()](https://docs.unity3d.com/ScriptReference/ImageConversion.EncodeToPNG.html) fail for external textures. To compensate, the IWebView interface includes ts own [GetRawTextureData()](#GetRawTextureData) and [CaptureScreenshot()](#CaptureScreenshot) methods to replace them.\n\nAnother quirk of this texture is that Unity always reports its size as 1300px \xd7 1300px in the editor. In reality, 3D WebView resizes the texture in native code to match the dimensions of the webview, but Unity doesn't provide an API to notify the engine that an external texture's size has changed. So, Unity always reports its size as the initial size that was passed to Texture2D.CreateExternalTexture(), which in 3D WebView's case is 1300px \xd7 1300px.\n",example:"await webViewPrefab.WaitUntilInitialized();\nvar material = webViewPrefab.WebView.CreateMaterial();\n// Note: the material returned by CreateMaterial() already\n// has its mainTexture set to IWebView.Texture, so setting\n// it explicitly like this is really only needed if you are\n// switching a material from one webview's texture to another.\nmaterial.mainTexture = webViewPrefab.WebView.Texture;"},{name:"Title",returns:"string",type:"property",propertyAccessors:{get:!0},description:"Gets the current web page title.",example:'// Get the page\'s title after it finishes loading.\nawait webViewPrefab.WaitUntilInitialized();\nawait webViewPrefab.WebView.WaitForNextPageLoadToFinish();\nDebug.Log("Page title: " + webViewPrefab.WebView.Title);',seeAlso:"[TitleChanged](#TitleChanged)",warnings:[ye]},{name:"Url",returns:"string",type:"property",propertyAccessors:{get:!0},description:"Gets the current URL.",example:'// Get the page\'s URL after it finishes loading.\nawait webViewPrefab.WaitUntilInitialized();\nawait webViewPrefab.WebView.WaitForNextPageLoadToFinish();\nDebug.Log("Page URL: " + webViewPrefab.WebView.Url);',seeAlso:"[UrlChanged](#UrlChanged)",warnings:[ye]},{name:"CanGoBack",returns:"Task<bool>",type:"method",description:"Checks whether the webview can go back with a call to [GoBack()](#GoBack).",example:"var canGoBack = await webViewPrefab.CanGoBack();",seeAlso:"[GoBack()](#GoBack)",warnings:[ye]},{name:"CanGoForward",returns:"Task<bool>",type:"method",description:"Checks whether the webview can go forward with a call to [GoForward()](#GoForward).",example:"var canGoForward = await webViewPrefab.CanGoForward();",seeAlso:"[GoForward()](#GoForward)",warnings:[ye]},{name:"CaptureScreenshot",returns:"Task<bytes[]>",type:"method",description:"Returns a PNG image of the content visible in the webview.",example:'// Get a screenshot and write it to a file.\nvar screenshotBytes = await webViewPrefab.WebView.CaptureScreenshot();\nvar filePath = Path.Combine(Application.peristentDataPath, "screenshot.png");\nFile.WriteAllBytes(filePath, screenshotBytes);',seeAlso:["[ImageConversion.LoadImage()](https://docs.unity3d.com/ScriptReference/ImageConversion.LoadImage.html)","[GetRawTextureData()](#GetRawTextureData)"],warnings:["On iOS, screenshots do not include video content, which appears black.",We]},{name:"Click",returns:"void",type:"method",arguments:[{name:"xInPixels",type:"int"},{name:"yInPixels",type:"int"},{name:"preventStealingFocus",type:"bool",defaultValue:"false"}],description:"Clicks at the given coordinates in pixels in the web page, dispatching both a mouse down and a mouse up event.",example:"// Click at (250px, 100px).\nwebViewPrefab.WebView.Click(250, 100);\n\n// Click at (50px, 150px) and prevent stealing focus from another webview.\nwebViewPrefab.WebView.Click(50, 150, true);",warnings:[ye]},{name:"Click",returns:"void",type:"method",arguments:[{name:"normalizedPoint",type:"Vector2"},{name:"preventStealingFocus",type:"bool",defaultValue:"false"}],description:"Like [Click(int, int, bool?)](#Click), except it takes a [normalized point](https://support.vuplex.com/articles/normalized-points) instead of pixel coordinates.",example:"// Click in the exact center of the page.\nwebViewPrefab.WebView.Click(new Vector2(0.5f, 0.5f));\n\n// Click in the upper right quadrant of the page\n// and prevent stealing focus from another webview.\nwebViewPrefab.WebView.Click(new Vector2(0.75f, 0.25f), true);",warnings:[ye]},{name:"Copy",returns:"void",type:"method",description:"Copies the selected text to the clipboard.",example:"webViewPrefab.WebView.Copy();",seeAlso:["[Cut()](#Cut)","[Paste()](#Paste)","[SelectAll()](#SelectAll)"],warnings:[We]},{name:"CreateMaterial",returns:"Material",type:"method",description:"Creates a Material that can be used to display the webview. The returned material already has the webview's Texture set as its [mainTexture](https://docs.unity3d.com/ScriptReference/Material-mainTexture.html).\n\nNote that [WebViewPrefab](https://developer.vuplex.com/webview/WebViewPrefab) and [CanvasWebViewPrefab](https://developer.vuplex.com/webview/CanvasWebViewPrefab) take care of material creation for you, so you only need to call this method directly if you need to create an IWebView instance outside of a prefab with [Web.CreateWebView()](/webview/Web#CreateWebView).",example:"GetComponent<Renderer>().material = webView.CreateMaterial();"},{name:"Cut",returns:"void",type:"method",description:"Copies the selected text to the clipboard and removes it.",example:"webViewPrefab.WebView.Cut();",seeAlso:["[Copy()](#Copy)","[Paste()](#Paste)","[SelectAll()](#SelectAll)"],warnings:[We]},{name:"Dispose",returns:"void",type:"method",description:"Destroys the webview, releasing all of its resources.",warnings:["If you're using a [WebViewPrefab](/webview/WebViewPrefab) or [CanvasWebViewPrefab](/webview/CanvasWebViewPrefab), please call [Destroy()](/webview/WebViewPrefab#Destroy) on the prefab instead of calling IWebView.Dispose(). Calling IWebView.Dispose() while the prefab is still using the webview can cause issues."]},{name:"ExecuteJavaScript",returns:"Task<string>",type:"method",arguments:[{type:"string",name:"javaScript"}],description:"\nExecutes the given JavaScript in the context of the page and returns the result.\n\nIn order to run JavaScript, a web page must first be loaded. You can use [WaitForNextPageLoadToFinish()](#WaitForNextPageLoadToFinish) or the [LoadProgressChanged](#LoadProgressChanged) event to run JavaScript after a page loads.\n",example:'await webViewPrefab.WaitUntilInitialized();\nawait webViewPrefab.WebView.WaitForNextPageLoadToFinish();\nvar headerText = await webViewPrefab.WebView.ExecuteJavaScript("document.getElementsByTagName(\'h1\')[0].innerText");\nDebug.Log("H1 text: " + headerText);',seeAlso:["[PageLoadScripts](#PageLoadScripts)","[JS-to-C# message passing](https://support.vuplex.com/articles/how-to-send-messages-from-javascript-to-c-sharp)"],warnings:[ye]},{name:"ExecuteJavaScript",returns:"void",type:"method",arguments:[{type:"string",name:"javaScript"},{type:"Action<string>",name:"callback"}],description:"Like the other version of ExecuteJavaScript(), except it uses a callback instead of a Task to return the result. If you don't need the result from executing the JavaScript, you can improve the method's efficiency by passing `null` as the callback argument."},{name:"GetRawTextureData",returns:"Task<byte[]>",type:"method",description:"\nA replacement for [Texture2D.GetRawTextureData()](https://docs.unity3d.com/ScriptReference/Texture2D.GetRawTextureData.html) for [IWebView.Texture](#Texture).\n\nUnity's [Texture2D.GetRawTextureData()](https://docs.unity3d.com/ScriptReference/Texture2D.GetRawTextureData.html) method currently does not work for textures created with [Texture2D.CreateExternalTexture()](https://docs.unity3d.com/ScriptReference/Texture2D.CreateExternalTexture.html). So, this method serves as a replacement by providing the equivalent functionality. You can load the bytes returned by this method into another texture using [Texture2D.LoadRawTextureData()](https://docs.unity3d.com/ScriptReference/Texture2D.LoadRawTextureData.html). Note that on iOS, the texture data excludes video content, which appears black.",example:"var textureData = await webViewPrefab.WebView.GetRawTextureData();\nvar texture = new Texture2D(\n    webView.Size.x,\n    webView.Size.y,\n    TextureFormat.RGBA32,\n    false,\n    false\n);\ntexture.LoadRawTextureData(textureData);\ntexture.Apply();",seeAlso:["[Texture2D.LoadRawTextureData()](https://docs.unity3d.com/ScriptReference/Texture2D.LoadRawTextureData.html)","[CaptureScreenshot()](#CaptureScreenshot)"],warnings:[We]},{name:"GoBack",returns:"void",type:"method",description:"Navigates back to the previous page in the webview's history.",example:"webViewPrefab.WebView.GoBack();",seeAlso:"[CanGoBack()](#CanGoBack)"},{name:"GoForward",returns:"void",type:"method",description:"Navigates forward to the next page in the webview's history.",example:"webViewPrefab.WebView.GoForward();",seeAlso:"[GoForward()](#GoForward)"},{name:"HandleKeyboardInput",returns:"void",type:"method",arguments:[{type:"string",name:"key"}],description:"(Deprecated) Renamed to [SendKey()](#SendKey) in 3D WebView v4.0."},{name:"Init",returns:"Task",type:"method",arguments:[{type:"int",name:"width"},{type:"int",name:"height"}],description:"Asynchronously initializes the webview with the given the dimensions in pixels.\n\nNote that you don't need to call this method if you're using one of the prefabs, like WebViewPrefab. You only need to call Init() if you create an IWebView directly with [Web.CreateWebView()](/webview/Web#CreateWebView). Also, this method's signature was [updated in 3D WebView v4](https://support.vuplex.com/articles/v4-changes#init)."},{name:"LoadHtml",returns:"void",type:"method",arguments:[{type:"string",name:"html"}],description:"Loads the webpage contained in the given HTML string.",example:"await webViewPrefab.WaitUntilInitialized();\nwebViewPrefab.WebView.LoadHtml(@\"\n  <!DOCTYPE html>\n  <html>\n    <head>\n      <title>Test Page</title>\n      <style>\n        h1 {\n          font-family: Helvetica, Arial, Sans-Serif;\n        }\n      </style>\n    </head>\n    <body>\n      <h1>LoadHtml Example</h1>\n      <script>\n        console.log('This page was loaded!');\n      <\/script>\n    </body>\n  </html>\"\n);",seeAlso:"[LoadUrl()](#LoadUrl)",warnings:["For [2D WebView for WebGL](https://store.vuplex.com/webview/webgl), please see [this article](https://support.vuplex.com/articles/webgl-limitations#cross-origin-limitation) that describes how this API is impacted by browser limitations."]},{name:"LoadUrl",returns:"void",type:"method",arguments:[{type:"string",name:"url"}],description:'\nLoads the given URL. Supported URL schemes:\n- `http://`, `https://` - loads a remote page over HTTP\n- `streaming-assets://` - loads a local page from [StreamingAssets](https://docs.unity3d.com/Manual/StreamingAssets.html)\n    (equivalent to `"file://" + Application.streamingAssetsPath + path`)\n- `file://` - some platforms support loading arbitrary file URLs\n',example:'await webViewPrefab.WaitUntilInitialized();\nwebViewPrefab.WebView.LoadUrl("https://vuplex.com");',seeAlso:["[How to load local files](https://support.vuplex.com/articles/how-to-load-local-files)","[LoadHtml()](#LoadHtml)","[WebViewPrefab.InitialUrl](/webview/WebViewPrefab#InitialUrl)"]},{name:"LoadUrl",returns:"void",type:"method",arguments:[{type:"string",name:"url"},{type:"Dictionary<string, string>",name:"additionalHttpHeaders"}],description:"Like [LoadUrl(string url)](#LoadUrl), but also sends the given additional HTTP request headers when loading the URL. The headers are sent for the initial page load request but are not sent for requests for subsequent resources, like linked JavaScript or CSS files.",example:'await webViewPrefab.WaitUntilInitialized();\nwebViewPrefab.WebView.LoadUrl("https://vuplex.com", new Dictionary<string, string> {\n    ["Authorization"] = "Basic YWxhZGRpbjpvcGVuc2VzYW1l",\n    ["Cookie"] = "foo=bar"\n});',warnings:["On Windows and macOS, this method cannot be used to set the Accept-Language header. For more info, please see [this article](https://support.vuplex.com/articles/how-to-change-accept-language-header).","For [2D WebView for WebGL](https://store.vuplex.com/webview/webgl), this method is unable to send additional headers due to browser limitations, so it loads the URL without additional headers."]},{name:"NormalizedToPoint",returns:"Vector2Int",type:"method",arguments:[{name:"normalizedPoint",type:"Vector2"}],description:"Returns a point in pixels for the given [normalized point](https://support.vuplex.com/articles/normalized-points).",example:'webViewPrefab.Clicked += (sender, eventArgs) => {\n    var pointInPixels = webViewPrefab.WebView.NormalizedToPoint(eventArgs.Point);\n    Debug.Log("Point in pixels: " + pointInPixels);\n};',seeAlso:["[PointToNormalized()](#NormalizedToPoint)"]},{name:"Paste",returns:"void",type:"method",description:"Pastes text from the clipboard.",example:"webViewPrefab.WebView.Paste();",seeAlso:["[Copy()](#Copy)","[Cut()](#Cut)"],warnings:[We]},{name:"PointToNormalized",returns:"Vector2",type:"method",arguments:[{name:"xInPixels",type:"int"},{name:"yInPixels",type:"int"}],description:"Returns a [normalized point](https://support.vuplex.com/articles/normalized-points) for the given x and y coordinates in pixels. This can be used to create normalized points for APIs that accept them, like [MovePointer()](https://developer.vuplex.com/webview/IWithMovablePointer#MovePointer).",example:"var webView = webViewPrefab.WebView;\n// Scroll to the right by 50 pixels at (100px, 1300px).\nwebView.Scroll(\n    webView.PointToNormalized(50, 0),\n    webView.PointToNormalized(100, 1300)\n);",seeAlso:["[NormalizedToPoint()](#NormalizedToPoint)"]},{name:"PostMessage",returns:"void",type:"method",arguments:[{type:"string",name:"data"}],description:"\nPosts a message that JavaScript within the webview can listen for using `window.vuplex.addEventListener('message', function(message) {})`. The provided data string is passed as the data property of the message object.\n\nFor more details, please see [this support article](https://support.vuplex.com/articles/how-to-send-messages-from-javascript-to-c-sharp).",example:"await webViewPrefab.WebView.WaitUntilInitialized();\n// Add some JavaScript to the page to receive the message.\nwebViewPrefab.WebView.PageLoadScripts(@\"\n    window.vuplex.addEventListener('message', function(event) {\n        console.log('Message received from C#: ' + event.data);\n    });\n\");\n// When the page finishes loading, send a message from C# to JavaScript.\nawait webViewPrefab.WebView.WaitForNextPageLoadToFinish();\nwebViewPrefab.WebView.PostMessage(\"Hello from C#\");"},{name:"Reload",returns:"void",type:"method",description:"Reloads the current page.",example:"webViewPrefab.WebView.Reload();"},{name:"Resize",returns:"void",type:"method",arguments:[{type:"int",name:"width"},{type:"int",name:"height"}],description:"Resizes the webview to the given dimensions in pixels.",warnings:["If you're using [WebViewPrefab](#WebViewPrefab), you should call [WebViewPrefab.Resize()](/webview/WebViewPrefab#Resize) instead."],seeAlso:["[Size](#Size)"]},{name:"Scroll",returns:"void",type:"method",arguments:[{type:"int",name:"scrollDeltaXInPixels"},{type:"int",name:"scrollDeltaYInPixels"}],description:"Scrolls the top-level document by the given delta in pixels. This method works by calling window.scrollBy(), which works for simple web pages but not for all pages. An alternative is to instead use [Scroll(Vector2, Vector2)](#Scroll) to scroll at a specific location in the page.",example:"// Scroll down by 50 pixels.\nwebViewPrefab.WebView.Scroll(0, 50);\n\n// Scroll to the left by 20 pixels.\nwebViewPrefab.WebView.Scroll(-20, 0);",warnings:[ye]},{name:"Scroll",returns:"void",type:"method",arguments:[{type:"Vector2",name:"scrollDelta"}],description:"Like [Scroll(int, int)](#Scroll), but accepts a [normalized scroll delta](https://support.vuplex.com/articles/normalized-points) instead of values in pixels.",example:"// Scroll down one quarter of the page.\nwebViewPrefab.WebView.Scroll(new Vector2(0, 0.25f));",warnings:[ye]},{name:"Scroll",returns:"void",type:"method",arguments:[{type:"Vector2",name:"scrollDelta"},{type:"Vector2",name:"point"}],description:"Scrolls by the given [normalized scroll delta](https://support.vuplex.com/articles/normalized-points) at the given [normalized pointer position](https://support.vuplex.com/articles/normalized-points).",example:"var webView = webViewPrefab.WebView;\n// Scroll down by a quarter of the page in the center of the page\nwebView.Scroll(new Vector2(0, 0.25f), new Vector2(0.5f, 0.5f));\n\n// Scroll to the right by 50 pixels at (100px, 1300px).\nwebView.Scroll(\n    webView.PointToNormalized(50, 0),\n    webView.PointToNormalized(100, 1300)\n);",warnings:[ye]},{name:"SelectAll",returns:"void",type:"method",description:"Selects all text, depending on the page's focused element.",example:"webViewPrefab.WebView.SelectAll();",seeAlso:["[Copy()](#Copy)"],warnings:[ye]},{name:"SendKey",returns:"void",type:"method",arguments:[{type:"string",name:"key"}],description:'Dispatches the given keyboard key to the webview.\n\nA key can either be a single character representing a unicode character (e.g. "A", "b", "?") or a [JavaScript key value](https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key/Key_Values) (e.g. "ArrowUp", "Enter", "Backspace", "Delete").',example:'// Type "Hi!" and then submit the Enter key.\nwebViewPrefab.WebView.SendKey("H");\nwebViewPrefab.WebView.SendKey("i");\nwebViewPrefab.WebView.SendKey("!");\nwebViewPrefab.WebView.SendKey("Enter");',seeAlso:"[IWithKeyDownAndUp](/webview/IWithKeyDownAndUp)",warnings:[ye]},{name:"SetFocused",returns:"void",type:"method",arguments:[{type:"bool",name:"focused"}],description:"Makes the webview take or relinquish focus.",example:"webViewPrefab.WebView.SetFocused(true);",warnings:[ye]},{name:"SetRenderingEnabled",returns:"void",type:"method",arguments:[{type:"bool",name:"enabled"}],description:"Enables or disables the webview's ability to render to its texture. By default, a webview renders web content to its texture, but you can use this method to disable or re-enable rendering.",example:"webViewPrefab.WebView.SetRenderingEnabled(false);",warnings:["This method is ignored when running in [Native 2D Mode](https://support.vuplex.com/articles/native-2d-mode)."]},{name:"StopLoad",returns:"void",type:"method",description:"Stops the current page load if one is in progress.",example:"webViewPrefab.WebView.StopLoad();"},{name:"WaitForNextPageLoadToFinish",returns:"Task",type:"method",description:"Returns a task that completes when the next page load finishes loading, or throws a PageLoadFailedException if the page load fails.",example:'await webViewPrefab.WaitUntilInitialized();\nawait webViewPrefab.WebView.WaitForNextPageLoadToFinish();\nDebug.Log("The web page finished loading.");',seeAlso:["[LoadProgressChanged](#LoadProgressChanged)"]},{name:"ZoomIn",returns:"void",type:"method",description:"Zooms into the currently loaded web content. Note that the zoom level gets reset when a new page is loaded.",example:"// Zoom in after the page finishes loading.\nawait webViewPrefab.WaitUntilInitialized();\nawait webViewPrefab.WebView.WaitForNextPageLoadToFinish();\nwebViewPrefab.WebView.ZoomIn();",warnings:["On Windows and macOS, adjusting the zoom also affects other webviews viewing the same site, similar to how tabs behave in a desktop browser."]},{name:"ZoomOut",returns:"void",type:"method",description:"Zooms back out after a previous call to `ZoomIn()`. Note that the zoom level gets reset when a new page is loaded.",example:"// Zoom out after the page finishes loading.\nawait webViewPrefab.WaitUntilInitialized();\nawait webViewPrefab.WebView.WaitForNextPageLoadToFinish();\nwebViewPrefab.WebView.ZoomOut();",warnings:["On Windows and macOS, adjusting the zoom also affects other webviews viewing the same site, similar to how tabs behave in a desktop browser."]}]},{name:"IWithDownloads",type:"interface",description:"An interface implemented by a webview if it supports file downloads. When downloads are enabled enabled, files are downloaded to [Application.temporaryCachePath](https://docs.unity3d.com/ScriptReference/Application-temporaryCachePath.html), but you can move them to a different location after they finish downloading.",example:'await webViewPrefab.WaitUntilInitialized();\nvar webViewWithDownloads = webViewPrefab.WebView as IWithDownloads;\nif (webViewWithDownloads != null) {\n    webViewWithDownloads.SetDownloadsEnabled(true);\n    webViewWithDownloads.DownloadProgressChanged += (sender, eventArgs) => {\n        Debug.Log(\n            $@"DownloadProgressChanged:\n            Type: {eventArgs.Type},\n            Url: {eventArgs.Url},\n            Progress: {eventArgs.Progress},\n            Id: {eventArgs.Id},\n            FilePath: {eventArgs.FilePath},\n            ContentType: {eventArgs.ContentType}"\n        );\n        if (eventArgs.Type == ProgressChangeType.Finished) {\n            Debug.Log("Download finished");\n            File.Move(eventArgs.FilePath, someOtherLocation);\n        }\n    };\n}',members:[{name:"SetDownloadsEnabled",type:"method",returns:"void",arguments:[{name:"enabled",type:"bool"}],description:"Sets whether file downloads are enabled. The default is disabled."},{name:"DownloadProgressChanged",type:"event",returns:"EventHandler<DownloadChangedEventArgs>",description:"Indicates that the progress of a file download changed."}]},{name:"IWithFallbackVideo",type:"interface",description:"Interface used on iOS for the [fallback video implementation](https://support.vuplex.com/articles/fallback-video).",members:[{name:"FallbackVideoEnabled",type:"property",returns:"bool",propertyAccessors:{get:!0},description:"Indicates whether the fallback video implementation is enabled."},{name:"VideoTexture",type:"property",returns:"Texture2D?",propertyAccessors:{get:!0},description:"The video texture used for the fallback video implementation, or `null` if the fallback video implementation is not enabled."},{name:"VideoRectChanged",type:"event",returns:"EventHandler<EventArgs<Rect>>",description:"Indicates that the rect of the playing video changed."},{name:"CreateVideoMaterial",type:"method",returns:"Material",description:"Returns a Material that can be used for displaying the [VideoTexture](#VideoTexture)."},{name:"SetFallbackVideoEnabled",type:"method",returns:"void",description:"Sets whether the fallback video implementation is enabled. The default is `false`.",arguments:[{name:"enabled",type:"bool"}]}]},{name:"IWithFind",type:"interface",description:"An interface implemented by a webview if it supports finding text in the page.",example:'await webViewPrefab.WaitUntilInitialized;\n// Search for the word "and" in the page.\nvar webViewWithFind = webViewPrefab.WebView as IWithFind;\nif (webViewWithFind == null) {\n    Debug.Log("This 3D WebView plugin doesn\'t yet support IWithFind: " + webViewPrefab.WebView.PluginType);\n    return;\n}\nvar result = await webViewWithFind.Find("and", true);\nDebug.Log($"Number of matches: {result.MatchCount}. Index of current match: {result.CurrentMatchIndex}");\nif (result.MatchCount > 1) {\n    // Later, scroll to the next instance of "and" in the page.\n    await webViewWithFind.Find("and", true);\n    // Later, go back to the first match.\n    await webViewWithFind.Find("and", false);\n}\n// Later, clear all matches.\nwebViewWithFind.ClearFindMatches();',members:[{name:"ClearFindMatches",type:"method",returns:"void",description:"Clears the visual indicator of matches triggered by a previous call to [Find()](#Find)."},{name:"Find",type:"method",returns:"Task<FindResult>",arguments:[{name:"text",type:"string"},{name:"forward",type:"bool"}],description:"Finds the given text in the page. If the page contains a match for the given text, then the browser scrolls to and highlights that match. If the returned FindResult indicates that there are matches, then the application can call Find() again with the same text to scroll to the next or previous match, as determined by the `forward` parameter. Highlighted matches can be cleared by calling [ClearFindMatches()](#ClearFindMatches)."}]},{name:"IWithFileSelection",type:"interface",description:"An interface implemented by a webview if it supports file selection. This interface doesn't cause a file selection UI to automatically be shown, but the application can use this interface's [FileSelectionRequested](#FileSelectionRequested) event to detect when file selection is requested and then use a system API or third party asset to present the user with a file selection UI.",example:'await webViewPrefab.WaitUntilInitialized();\nvar webViewWithFileSelection = webViewPrefab.WebView as IWithFileSelection;\nif (webViewWithFileSelection != null) {\n    webViewWithFileSelection.FileSelectionRequested += (sender, eventArgs) => {\n        // Note: Here\'s where the application could use a system API or third party\n        //       asset to show a file selection UI and then pass the selected file(s) to\n        //       the Continue() callback.\n        var filePaths = new string[] { "C:\\Users\\YourUser\\Desktop\\selected-file.txt" };\n        eventArgs.Continue(filePaths);\n    };\n}',members:[{name:"FileSelectionRequested",type:"event",returns:"EventHandler<FileSelectionEventArgs>",description:"Indicates that the page requested a file selection dialog. This can happen, for example, when a file input is activated. Call the event args' [Continue(filePaths)](/webview/FileSelectionEventArgs#Continue) callback to provide a file selection or call [Cancel()](/webview/FileSelectionEventArgs#Continue) to cancel file selection."}]},{name:"IWithKeyDownAndUp",type:"interface",description:"An interface implemented by a webview if it supports separate `KeyDown()` and `KeyUp()` methods.",example:'// Dispatch ctrl + shift + right arrow\nawait webViewPrefab.WaitUntilInitialized();\nvar webViewWithKeyDownAndUp = webViewPrefab.WebView as IWithKeyDownAndUp;\nif (webViewWithKeyDownAndUp != null) {\n    webViewWithKeyDownAndUp.KeyDown("ArrowRight", KeyModifier.Control | KeyModifier.Shift);\n    webViewWithKeyDownAndUp.KeyUp("ArrowRight", KeyModifier.Control | KeyModifier.Shift);\n}',members:[{name:"KeyDown",returns:"void",type:"method",arguments:[{type:"string",name:"key"},{type:"KeyModifier",name:"modifiers"}],description:'Dispatches a key down event to the webview.\n\nA key can either be a single character representing a unicode character (e.g. "A", "b", "?") or a [JavaScript Key value](https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key/Key_Values) (e.g. "ArrowUp", "Enter").'},{name:"KeyUp",returns:"void",type:"method",arguments:[{type:"string",name:"key"},{type:"KeyModifier",name:"modifiers"}],description:"Dispatches a key up event to the webview."}]},{name:"IWithMovablePointer",type:"interface",description:"An interface implemented by a webview if it supports [MovePointer()](#MovePointer), which can be used to implement hover or drag interactions.",example:"var webViewWithMovablePointer = webViewPrefab.WebView as IWithMovablePointer;\nif (webViewWithMovablePointer != null) {\n    // Move the pointer to (250px, 100px) in the web page.\n    var normalizedPoint = webViewPrefab.WebView.PointToNormalized(250, 100);\n    webViewWithMovablePointer.MovePointer(normalizedPoint)\n}",members:[{name:"MovePointer",returns:"void",type:"method",arguments:[{type:"Vector2",name:"point"}],description:"Moves the pointer to the given [normalized point](https://support.vuplex.com/articles/normalized-points) in the web page. This can be used to trigger hover effects in the page or can be used in conjunction with [IWithPointerDownAndUp](/webview/IWithPointerDownAndUp) to implement drag interactions."}]},{name:"IWithMutableAudio",type:"interface",description:"An interface implemented by a webview if it supports muting audio.",example:"await webViewPrefab.WaitUntilInitialized();\nvar mutableWebView = webViewPrefab.WebView as IWithMutableAudio;\nif (mutableWebView != null) {\n    mutableWebView.SetAudioMuted(true);\n}",members:[{name:"SetAudioMuted",type:"method",returns:"void",arguments:[{name:"muted",type:"bool"}],description:"Sets whether audio is muted. The default is `false`."}]},{name:"IWithNative2DMode",type:"interface",description:"An interface implemented by a webview if it supports [Native 2D Mode](https://support.vuplex.com/articles/native-2d-mode), which makes it so that 3D WebView positions a native 2D webview in front of the Unity game view instead of displaying web content as a texture in the Unity scene.",seeAlso:["[CanvasWebViewPrefab.Native2DModeEnabled](/webview/CanvasWebViewPrefab#Native2DModeEnabled)"],members:[{name:"Native2DModeEnabled",type:"property",propertyAccessors:{get:!0},returns:"bool",description:"Gets a value indicating whether the webview is running in Native 2D Mode."},{name:"Rect",type:"property",propertyAccessors:{get:!0},returns:"Rect",description:"Gets the native 2D webview's rect on the screen, in pixels.",seeAlso:["[IWithNative2DMode.SetRect](#SetRect)"]},{name:"Visible",type:"property",propertyAccessors:{get:!0},returns:"bool",description:"Gets a value indicating whether the native 2D webview is visible. The default is `true`.",seeAlso:["[CanvasWebViewPrefab.Visible](/webview/CanvasWebViewPrefab#Visible)","[IWithNative2DMode.SetVisible](#SetVisible)"]},{name:"InitInNative2DMode",type:"method",returns:"Task",description:"Initializes the webview in Native 2D Mode. This method is to be used instead of [IWebView.Init()](/webview/IWebView#Init) for initialization.",arguments:[{name:"rect",type:"Rect"}]},{name:"SetNativeZoomEnabled",type:"method",returns:"void",description:"Sets whether the native 2D webview's pinch-to-zoom behavior is enabled. The default is `true`.",arguments:[{name:"enabled",type:"bool"}]},{name:"SetRect",type:"method",returns:"void",description:"Sets the native 2D webview's rect on the screen, in pixels.",arguments:[{name:"rect",type:"Rect"}],seeAlso:["[IWithNative2DMode.Rect](#Rect)"]},{name:"SetVisible",type:"method",returns:"void",description:"Sets the native 2D webview's rect on the screen, in pixels.",arguments:[{name:"visible",type:"bool"}],seeAlso:["[CanvasWebViewPrefab.Visible](/webview/CanvasWebViewPrefab#Visible)","[IWithNative2DMode.SetVisible](#SetVisible)"]}]},{name:"IWithNativeOnScreenKeyboard",type:"interface",description:"An interface implemented by a webview if it supports using a native on-screen keyboard.",seeAlso:["[CanvasWebViewPrefab.NativeOnScreenKeyboardEnabled](/webview/CanvasWebViewPrefab#NativeOnScreenKeyboardEnabled)","[WebViewPrefab.NativeOnScreenKeyboardEnabled](/webview/WebViewPrefab#NativeOnScreenKeyboardEnabled)"],members:[{name:"SetNativeOnScreenKeyboardEnabled",type:"method",returns:"void",description:"Enables or disables the native on-screen keyboard.",arguments:[{name:"enabled",type:"bool"}]}]},{name:"IWithPointerDownAndUp",type:"interface",description:"An interface implemented by a webview if it supports [PointerDown()](#PointerDown) and [PointerUp()](#PointerUp), which can be used to implement functionality like drag interactions, double-clicks, and right-clicks.",example:"var webViewWithPointerDownAndUp = webViewPrefab.WebView as IWithPointerDownAndUp;\nif (webViewWithPointerDownAndUp != null) {\n    // Double right click at (250px, 100px) in the web page.\n    var normalizedPoint = webViewPrefab.WebView.PointToNormalized(250, 100);\n    var pointerOptions = new PointerOptions {\n        Button = MouseButton.Right,\n        ClickCount = 2\n    };\n    webViewWithPointerDownAndUp.PointerDown(normalizedPoint, pointerOptions);\n    webViewWithPointerDownAndUp.PointerUp(normalizedPoint, pointerOptions);\n}",warnings:["The [Android Gecko](/webview/AndroidGeckoWebView) plugin doesn't support double clicks."],members:[{name:"PointerDown",returns:"void",type:"method",arguments:[{type:"Vector2",name:"point"}],description:"Dispatches a [pointerdown](https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/pointerdown_event) / [mousedown](https://developer.mozilla.org/en-US/docs/Web/API/Element/mousedown_event) click event at the given [normalized point](https://support.vuplex.com/articles/normalized-points). This can be used in conjunction with [IWithMovablePointer.MovePointer()](/webview/IWithMovablePointer#MovePointer) and [PointerUp()](#PointerUp) to implement drag interactions."},{name:"PointerDown",returns:"void",type:"method",arguments:[{type:"Vector2",name:"point"},{type:"PointerOptions",name:"options"}],description:"Like PointerDown(Vector2), except it also accepts a PointerOptions parameter to modify the behavior (e.g. to trigger a right click or a double click)."},{name:"PointerUp",returns:"void",type:"method",arguments:[{type:"Vector2",name:"point"}],description:"Dispatches a [pointerup](https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/pointerup_event) / [mouseup](https://developer.mozilla.org/en-US/docs/Web/API/Element/mouseup_event) click event at the given [normalized point](https://support.vuplex.com/articles/normalized-points). This can be used in conjunction with [PointerDown()](#PointerDown) and [IWithMovablePointer.MovePointer()](/webview/IWithMovablePointer#MovePointer) and to implement drag interactions."},{name:"PointerUp",returns:"void",type:"method",arguments:[{type:"Vector2",name:"point"},{type:"PointerOptions",name:"options"}],description:"Like PointerUp(Vector2), except it also accepts a `PointerOptions` parameter to modify the behavior (e.g. to trigger a right click or a double click)."}]},{name:"IWithPopups",type:"interface",description:"An interface implemented by a webview if it supports opening popups. For detailed examples, please see 3D WebView's PopupDemo and CanvasPopupDemo scenes.",example:'await webViewPrefab.WaitUntilInitialized;\nvar webViewWithPopups = webViewPrefab.WebView as IWithPopups;\nif (webViewWithPopups != null) {\n    webViewWithPopups.SetPopupMode(PopupMode.LoadInNewWebView);\n\n    webViewWithPopups.PopupRequested += async (sender, eventArgs) => {\n        Debug.Log("Popup opened with URL: " + eventArgs.Url);\n        // Create and display a new WebViewPrefab for the popup.\n        var popupPrefab = WebViewPrefab.Instantiate(eventArgs.WebView);\n        popupPrefab.transform.parent = transform;\n        popupPrefab.transform.localPosition = Vector3.zero;\n        popupPrefab.transform.localEulerAngles = new Vector3(0, 180, 0);\n        await popupPrefab.WaitUntilInitialized();\n        popupPrefab.WebView.CloseRequested += (popupWebView, closeEventArgs) => {\n            Debug.Log("Closing the popup");\n            popupPrefab.Destroy();\n        };\n    };\n}',members:[{name:"SetPopupMode",type:"method",returns:"void",arguments:[{name:"popupMode",type:"PopupMode"}],description:"Sets how the webview handles popups."},{name:"PopupRequested",type:"event",returns:"EventHandler<PopupRequestedEventArgs>",description:"Indicates that the webview requested a popup."}]},{name:"IWithSettableUserAgent",type:"interface",description:"An interface implemented by a webview if it supports changing the [User-Agent](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/User-Agent) of an individual webview instance.",example:'await webViewPrefab.WaitUntilInitialized();\nvar webViewWithUserAgent = webViewPrefab.WebView as IWithSettableUserAgent;\nif (webViewWithUserAgent) {\n    // Set a flag indicating a mobile User-Agent.\n    webViewWithUserAgent.SetUserAgent(true);\n    // OR set a custom User-Agent string.\n    webViewWithUserAgent.SetUserAgent("Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:91.0) Gecko/20100101 Firefox/91.0");\n}',members:[{name:"SetUserAgent",type:"method",returns:"void",arguments:[{name:"mobile",type:"bool"}],description:"By default, a webview uses a User-Agent of a desktop computer so that servers return the desktop versions of websites. If you instead want the mobile versions of websites, you can invoke this method with the value `true` to configure the webview instance to use a User-Agent of a mobile device.",seeAlso:"[Web.SetUserAgent()](/webview/Web#SetUserAgent)"},{name:"SetUserAgent",type:"method",returns:"void",arguments:[{name:"userAgent",type:"string"}],description:"Configures the webview instance to use a custom User-Agent string.",seeAlso:"[Web.SetUserAgent()](/webview/Web#SetUserAgent)"}]},{name:"KeyModifier",type:"enum",description:"Flags that indicate modifier keys for [IWithKeyDownAndUp](/webview/IWithKeyDownAndUp).",members:[{name:"None",type:"value",description:""},{name:"Shift",type:"value",description:""},{name:"Control",type:"value",description:""},{name:"Alt",type:"value",description:""},{name:"Meta",type:"value",description:""}]},{name:"Keyboard",type:"class",description:"A 3D, on-screen keyboard prefab that you can hook up to a webview for typing.\nYou can add a Keyboard to your scene either by dragging the Keyboard.prefab file into it\nvia the editor or by programmatically calling [Keyboard.Instantiate()](#Instantiate).\nFor use in a [Canvas](https://docs.unity3d.com/2020.1/Documentation/Manual/UICanvas.html), please see [CanvasKeyboard](/webview/CanvasKeyboard) instead.\n\nThe Keyboard's UI is a React.js app that runs inside a [WebViewPrefab](/webview/WebViewPrefab) and\nemits messages to C# when keys are pressed.\n[The keyboard UI is open source and available on GitHub](https://github.com/vuplex/unity-keyboard).\n\nThe keyboard supports layouts for the following languages and automatically sets the layout\nbased on the operating system's default language: English, Spanish, French, German, Russian, Danish, Norwegian, and Swedish.\n    ",example:'// First, create a WebViewPrefab for our main web content.\nvar webViewPrefab = WebViewPrefab.Instantiate(0.6f, 0.3f);\nwebViewPrefab.transform.parent = transform;\nwebViewPrefab.transform.localPosition = new Vector3(0, 0f, 0.4f);\nwebViewPrefab.transform.LookAt(transform);\nwebViewPrefab.Initialized += (sender, e) => {\n    webViewPrefab.WebView.LoadUrl("https://www.google.com");\n};\n\n// Add the keyboard under the main webview.\nvar keyboard = Keyboard.Instantiate();\nkeyboard.transform.SetParent(webViewPrefab.transform, false);\nkeyboard.transform.localPosition = new Vector3(0, -0.31f, 0);\nkeyboard.transform.localEulerAngles = Vector3.zero;\n// Hook up the keyboard so that characters are routed to the main webview.\nkeyboard.InputReceived += (sender, eventArgs) => {\n    webViewPrefab.WebView.SendKey(eventArgs.Value);\n};',inheritsFrom:["MonoBehaviour"],seeAlso:["[CanvasKeyboard](/webview/CanvasKeyboard)","[How does keyboard input work?](https://support.vuplex.com/articles/keyboard)"],members:[].concat(Object(H.a)(se),[{name:"WebViewPrefab",returns:"WebViewPrefab?",type:"property",propertyAccessors:{get:!0},description:"Gets the WebViewPrefab used for the keyboard UI, or `null` if the keyboard hasn't finished initializing yet. You can use [WaitUntilInitialized()](#WaitUntilInitialized) to detect when the WebViewPrefab property is ready to use.",example:'await keyboard.WaitUntilInitialized();\nkeyboard.WebViewPrefab.Clicked += (sender, eventArgs) => {\n    Debug.Log("Keyboard was clicked");\n};'},{name:"Instantiate",returns:"Keyboard",type:"method",static:!0,description:"Creates an instance using the default width and height."},{name:"Instantiate",returns:"Keyboard",type:"method",static:!0,arguments:[{type:"float",name:"width"},{type:"float",name:"height"}],description:"Creates an instance using the specified width and height."}])},{name:"MixedContentMode",type:"enum",description:"Options for the webview's behavior when a secure origin attempts to load a resource from an insecure origin.",members:[{name:"AlwaysAllow",type:"value",description:"In this mode, the webview will allow a secure origin to load content from any other origin, even if that origin is insecure."},{name:"NeverAllow",type:"value",description:"In this mode, the webview will not allow a secure origin to load content from an insecure origin."},{name:"CompatibilityMode",type:"value",description:"In this mode, the webview will attempt to be compatible with the approach of a modern web browser with regard to mixed content. Some insecure content may be allowed to be loaded by a secure origin and other types of content will be blocked. The types of content are allowed or blocked may change release to release and are not explicitly defined. This mode is intended to be used by apps that are not in control of the content that they render but desire to operate in a reasonably secure environment."}]},{name:"MouseButton",type:"enum",description:"Enum for the different mouse buttons.\n\nThis enum's values are compatible with those from\nthe UnityEngine.EventSystem [`InputButton`](https://docs.unity3d.com/Packages/com.unity.ugui@1.0/api/UnityEngine.EventSystems.PointerEventData.InputButton.html) enum,\nso you can safely cast an `InputButton` to a `MouseButton`.\n  ",members:[{name:"Left",type:"value",description:"The left mouse button (i.e. left click)."},{name:"Right",type:"value",description:"The right mouse button (i.e. right click)."},{name:"Middle",type:"value",description:"The center mouse button."}]},{name:"PointerEventArgs",type:"class",description:"Event args to indicate a pointer event (i.e. mouse event).",inheritsFrom:"System.EventArgs",members:[{name:"Button",returns:"MouseButton",type:"property",description:"The button for the event. The default is `MouseButton.Left`."},{name:"ClickCount",returns:"int",type:"property",description:"The number of clicks for the event. For example, for a double click, set this value to `2`. The default is `1`."},{name:"Point",returns:"Vector2",type:"property",description:"The [normalized point](https://support.vuplex.com/articles/normalized-points) passed to [IWebView.Click()](/webview/IWebView#Click)."},{name:"ToPointerOptions",returns:"PointerOptions",type:"method",description:"Converts the event args into PointerOptions that can be passed to methods like [PointerUp()](/webview/IWithPointerDownAndUp#PointerUp) and [PointerDown()](/webview/IWithPointerDownAndUp#PointerDown)."}]},{name:"PointerOptions",type:"class",description:"Options to alter pointer methods, like [`PointerUp()`](/webview/IWithPointerDownAndUp#PointerUp) and [`PointerDown()`](/webview/IWithPointerDownAndUp#PointerDown).",members:[{name:"Button",returns:"MouseButton",type:"property",description:"The button for the event. The default is `MouseButton.Left`."},{name:"ClickCount",returns:"int",type:"property",description:"The number of clicks for the event. For example, for a double click, set this value to `2`. The default value is `1`."}]},{name:"PopupMode",type:"enum",description:"Options for how a webview that implements `IWithPopups` handles popups.",members:[{name:"LoadInOriginalWebView",type:"value",description:i.a.createElement("div",null,"The popup URL is automatically loaded into the original webview. This is the default behavior. In this mode, the ",i.a.createElement(ve,{to:"/webview/IWithPopups#PopupRequested"},i.a.createElement("code",null,"PopupRequested"))," event isn't raised.")},{name:"LoadInNewWebView",type:"value",description:i.a.createElement("div",null,i.a.createElement("p",null,"The browser engine automatically creates a new webview for the popup and loads the popup URL into the new webview. The original webview then raises its ",i.a.createElement(ve,{to:"/webview/IWithPopups#PopupsRequested"},i.a.createElement("code",null,"PopupRequested"))," event and provides the new popup webview as ",i.a.createElement(ve,{to:"/webview/PopupRequestedEventArgs"},i.a.createElement("code",null,"PopupRequestedEventArgs.WebView")),"."),i.a.createElement("p",null,'Some authentication flows require this mode in order to function correctly. For example, auth flows like "Sign in with Google" open the signin page in a special popup that can relay the auth result back to the original page after authorization is finished.',i.a.createElement("code",null,"LoadInNewWebView")," must be used for flows like this, and the flow can not be emulated with the other popup modes."))},{name:"NotifyWithoutLoading",type:"value",description:i.a.createElement("div",null,"The browser engine doesn't automatically create a new webview for the popup, but it still raises the ",i.a.createElement(ve,{to:"/webview/IWithPopups#PopupRequested"},i.a.createElement("code",null,"PopupRequested"))," event with a ",i.a.createElement(ve,{to:"/webview/PopupRequestedEventArgs#WebView"},i.a.createElement("code",null,"PopupRequestedEventArgs.WebView"))," of ",i.a.createElement("code",null,"null"),".")}]},{name:"PopupRequestedEventArgs",type:"class",description:"Event args for [PopupRequested](/webview/IWithPopups#PopupRequested).",inheritsFrom:"System.EventArgs",members:[{name:"Url",returns:"string",type:"property",description:"The URL for the popup.",warnings:["Note that with 3D WebView for Android, the `Url` field may be empty in some cases when using `PopupMode.LoadInNewWebView`."]},{name:"WebView",returns:"IWebView",type:"property",description:i.a.createElement("div",null,"The new webview that was created for the popup if the webview's popup mode is set to ",i.a.createElement(ve,{to:"/webview/PopupMode#LoadInNewWebView"},i.a.createElement("code",null,"PopupMode.LoadInNewWebView")),", or null if the popup mode is set to ",i.a.createElement(ve,{to:"/webview/PopupMode#NotifyWithoutLoading"},i.a.createElement("code",null,"PopupMode.NotifyWithoutLoading")),".")}]},{name:"ProgressChangedEventArgs",type:"class",description:"Event args for [LoadProgressChanged](/webview/IWebView#LoadProgressChanged).",inheritsFrom:"System.EventArgs",members:[{name:"Progress",returns:"float",type:"property",description:"The estimated load progress normalized to a float between 0 and 1."},{name:"Type",returns:"ProgressChangeType",type:"property",description:"The load progress event type."}]},{name:"ProgressChangeType",description:"",type:"enum",members:[{name:"Started",type:"value",description:""},{name:"Finished",type:"value",description:""},{name:"Failed",type:"value",description:""},{name:"Updated",type:"value",description:""}]},{name:"ScriptDialogEventArgs",type:"class",description:"Generic event args for script dialog events like `ScriptConfirmRequested`. The type parameter determines the data type that must be passed to the `Continue` callback to continue script execution.",inheritsFrom:"System.EventArgs",members:[{name:"Message",returns:"string",type:"property",description:"The event's message."},{name:"Continue",returns:"Action<T>",type:"property",description:"The callback to invoke to continue script execution."}]},{name:"ScrolledEventArgs",type:"class",description:"Event args to indicate that a prefab has been scrolled.",inheritsFrom:"System.EventArgs",members:[{name:"ScrollDelta",returns:"Vector2",type:"property",description:"The scroll delta that was passed to `IWebView.Scroll()`."},{name:"Point",returns:"Vector2",type:"property",description:"The normalized point that was passed to `IWebView.Scroll()`."}]},{name:"StandaloneWebView",type:"class",description:"\nThe [IWebView](/webview/IWebView) implementation used by [3D WebView for Windows and macOS](".concat(ae.Standalone,").\nThis class also includes extra methods for Standalone-specific functionality, which your application can call by\nusing the approaches described in [this support article](https://support.vuplex.com/articles/how-to-call-platform-specific-apis#standalone).\n"),inheritsFrom:"IWebView",additionalInterfaces:["IWithDownloads","IWithFileSelection","IWithKeyDownAndUp","IWithMovablePointer","IWithMutableAudio","IWithPointerDownAndUp","IWithPopups"],sidebarSection:"platform",members:[{name:"AuthRequested",returns:"EventHandler<AuthRequestedEventArgs>",type:"event",description:'Indicates that a server requested [HTTP authentication](https://developer.mozilla.org/en-US/docs/Web/HTTP/Authentication) to make the browser show its built-in authentication UI.\n\nIf no handler is attached to this event, then the host\'s authentication request will be ignored\nand the page will not be paused. If a handler is attached to this event, then the page will\nbe paused until [Continue()](/webview/AuthRequestedEventArgs#Continue) or [Cancel()](/webview/AuthRequestedEventArgs#Cancel) is called.\n\nYou can test basic HTTP auth using [this page](https://jigsaw.w3.org/HTTP/Basic/)\nwith the username "guest" and the password "guest".',example:'await webViewPrefab.WaitUntilInitialized();\n#if UNITY_STANDALONE\n    var standaloneWebView = webViewPrefab.WebView as StandaloneWebView;\n    standaloneWebView.AuthRequested += (sender, eventArgs) => {\n        Debug.Log("Auth requested by " + eventArgs.Host);\n        eventArgs.Continue("myUsername", "myPassword");\n    };\n#endif',warnings:["This event is not raised for most websites because most sites implement a custom sign-in page instead of using HTTP authentication to show the browser's built-in authentication UI."]},{name:"DispatchTouchEvent",returns:"void",type:"method",static:!0,arguments:[{type:"TouchEvent",name:"touchEvent"}],description:"Dispatches a touch event (i.e. [touchstart](https://developer.mozilla.org/en-US/docs/Web/API/Element/touchstart_event), [touchend](https://developer.mozilla.org/en-US/docs/Web/API/Element/touchend_event), [touchmove](https://developer.mozilla.org/en-US/docs/Web/API/Element/touchmove_event), [touchcancel](https://developer.mozilla.org/en-US/docs/Web/API/Element/touchcancel_event)) in the webview. This can be used, for example, to implement multitouch interactions.",example:"#if UNITY_STANDALONE\n    var standaloneWebView = webViewPrefab.WebView as StandaloneWebView;\n    // Start and end a first touch at (250px, 100px) in the web page.\n    var normalizedPoint1 = webViewPrefab.WebView.PointToNormalized(250, 100);\n    standaloneWebView.DispatchTouchEvent(new TouchEvent {\n        TouchID = 1,\n        Point = normalizedPoint1,\n        Type = TouchEventType.Start\n    });\n    standaloneWebView.DispatchTouchEvent(new TouchEvent {\n        TouchID = 1,\n        Point = normalizedPoint1,\n        Type = TouchEventType.End\n    });\n    // Start a second touch at (400px, 100px), move it to (410px, 100), and release it.\n    var normalizedPoint2 = webViewPrefab.WebView.PointToNormalized(400, 100);\n    standaloneWebView.DispatchTouchEvent(new TouchEvent {\n        TouchID = 2,\n        Point = normalizedPoint2,\n        Type = TouchEventType.Start\n    });\n    var normalizedPoint3 = webViewPrefab.WebView.PointToNormalized(410, 100);\n    standaloneWebView.DispatchTouchEvent(new TouchEvent {\n        TouchID = 2,\n        Point = normalizedPoint3,\n        Type = TouchEventType.Move\n    });\n    standaloneWebView.DispatchTouchEvent(new TouchEvent {\n        TouchID = 2,\n        Point = normalizedPoint3,\n        Type = TouchEventType.End\n    });\n#endif"},{name:"EnableRemoteDebugging",returns:"void",type:"method",static:!0,arguments:[{type:"int",name:"portNumber"}],description:"Like [Web.EnableRemoteDebugging()](/webview/Web#EnableRemoteDebugging), but starts the DevTools session on the specified port instead of the default port 8080.",example:"void Awake() {\n    StandaloneWebView.EnableRemoteDebugging(9000);\n}"},{name:"SetCachePath",static:!0,returns:"void",type:"method",arguments:[{type:"string",name:"absoluteFilePath"}],description:"By default, Chromium's cache is saved at the file path [Application.persistentDataPath](https://docs.unity3d.com/ScriptReference/Application-persistentDataPath.html)/Vuplex.WebView/chromium-cache, but you can call this method to specify a custom file path for the cache instead. This is useful, for example, to allow multiple instances of your app to run on the same machine, because multiple instances of Chromium cannot simultaneously share the same cache.",example:'void Awake() {\n    #if UNITY_STANDALONE\n        var customCachePath = Path.Combine(Application.persistentDataPath, "your-chromium-cache");\n        StandaloneWebView.SetCachePath(customCachePath);\n    #endif\n}',warnings:[Ve]},{name:"SetCommandLineArguments",static:!0,returns:"void",type:"method",arguments:[{type:"string",name:"args"}],description:"Sets additional command line arguments to pass to Chromium. For reference, [here's an unofficial list of Chromium command line arguments](https://peter.sh/experiments/chromium-command-line-switches/).",example:'void Awake() {\n    #if UNITY_STANDALONE\n        StandaloneWebView.SetCommandLineArguments("--ignore-certificate-errors --disable-web-security");\n    #endif\n}',warnings:[Ve]},{name:"SetNativeFileDialogEnabled",returns:"void",type:"method",arguments:[{type:"bool",name:"enabled"}],description:"By default, the native file picker for file input elements is disabled, but it can be enabled with this method.",example:"await webViewPrefab.WaitUntilInitialized();\n#if UNITY_STANDALONE\n    var standaloneWebView = webViewPrefab.WebView as StandaloneWebView;\n    standaloneWebView.SetNativeFileDialogEnabled(true);\n#endif"},{name:"SetScreenSharingEnabled",type:"method",static:!0,returns:"void",arguments:[{type:"bool",name:"enabled"}],description:"\nBy default, web pages cannot share the device's screen\nvia JavaScript. Invoking `SetScreenSharingEnabled(true)` allows\n**all web pages** to share the screen.\n\nThe screen that is shared is the default screen, and there isn't currently\nsupport for sharing a different screen or a specific application window.\nThis is a limitation of Chromium Embedded Framework (CEF), which 3D WebView\nuses to embed Chromium.",example:"void Awake() {\n    #if UNITY_STANDALONE\n        StandaloneWebView.SetScreenSharingEnabled(true);\n    #endif\n}",warnings:[Ve]},{name:"SetTargetFrameRate",type:"method",static:!0,returns:"void",arguments:[{type:"uint",name:"targetFrameRate"}],description:"Sets the target web frame rate. The default is `60`, which is also the maximum value. Specifying a target frame rate of `0` disables the frame rate limit.",example:"void Awake() {\n    #if UNITY_STANDALONE\n        // Disable the frame rate limit.\n        StandaloneWebView.SetTargetFrameRate(0);\n    #endif\n}",warnings:[Ve]},{name:"SetZoomLevel",returns:"void",type:"method",arguments:[{type:"float",name:"zoomLevel"}],description:"Sets the zoom level to the specified value. Specify `0.0` to reset the zoom level.",example:"// Set the zoom level to 1.75 after the page finishes loading.\nawait webViewPrefab.WaitUntilInitialized();\nwebViewPrefab.WebView.LoadProgressChanged += (sender, eventArgs) => {\n    if (eventArgs.Type == ProgressChangeType.Finished) {\n        #if UNITY_STANDALONE\n            var standaloneWebView = webViewPrefab.WebView as StandaloneWebView;\n            standaloneWebView.SetZoomLevel(1.75f);\n        #endif\n    }\n};"}]},{name:"TerminatedEventArgs",type:"class",description:"Event args for [Terminated](/webview/AndroidGeckoWebView#Terminated).",inheritsFrom:"System.EventArgs",members:[{name:"Type",returns:"TerminationType",type:"property",description:"Indicates the cause of the termination."}]},{name:"TerminationType",type:"enum",description:"",members:[{name:"Crashed",type:"value",description:"Indicates that the browser process terminated because it crashed."},{name:"Killed",type:"value",description:"Indicates that the browser process terminated because it was killed by the operating system. This can happen on Android and iOS because those mobile operating systems can terminate application processes when the device is low on memory or CPU resources."}]},{name:"TouchEvent",type:"struct",description:"A touch event that can be dispatched with [StandaloneWebView.DispatchTouchEvent()](/webview/StandaloneWebView#DispatchTouchEvent).",members:[{name:"TouchID",returns:"int",type:"property",description:"ID of the touch. This value must be unique per touch but is shared by al events for the same touch (i.e. the Start, Move, and End events for  single touch share the same TouchID). This can be any number except -1, an a maximum of 16 concurrent touches are tracked."},{name:"Type",returns:"TouchEventType",type:"property",description:"The touch event type. Touches begin with one [TouchEventType.Start](/webview/TouchEventType#Start) event, followed by zero or more [TouchEventType.Move](/webview/TouchEventType#Move) events, and finally one [TouchEventType.End](/webview/TouchEventType#End) or [TouchEventType.Cancel](/webview/TouchEventType#Cancel) event."},{name:"Point",returns:"Vector2",type:"property",description:"The [normalized point](https://support.vuplex.com/articles/normalized-points) of the touch event."},{name:"RadiusX",returns:"float",type:"property",description:"(optional) The X radius of the touch in pixels. If not set, the default value of 25px will be used."},{name:"RadiusY",returns:"float",type:"property",description:"(optional) The Y radius of the touch in pixels. If not set, the default value of 25px will be used."},{name:"RotationAngle",returns:"float",type:"property",description:"(optional) The rotation angle in radians."},{name:"RotationAngle",returns:"float",type:"property",description:"(optional) The normalized pressure of the touch in the range of \\[0, 1]."}]},{name:"TouchEventType",type:"enum",description:"Touch event type values for [TouchEvent.Type](/webview/TouchEvent#Type).",members:[{name:"End",type:"value",description:""},{name:"Start",type:"value",description:""},{name:"Move",type:"value",description:""},{name:"Cancel",type:"value",description:""}]},{name:"UrlChangedEventArgs",type:"class",description:"Event args for [UrlChanged](/webview/IWebView#UrlChanged).",inheritsFrom:"System.EventArgs",members:[{name:"Url",returns:"string",type:"property",description:"The new webpage URL."},{name:"Type",returns:"string",type:"property",description:'Indicates the type of URL change (`"LOAD"`, `"PUSH_STATE"`, `"REPLACE_STATE"`, or `"HASH_CHANGE"`).'}]},{name:"UwpWebView",type:"class",description:"The [IWebView](/webview/IWebView) implementation used by [3D WebView for UWP / Hololens](".concat(ae.Uwp,"). This class also includes extra methods for UWP-specific functionality."),inheritsFrom:"IWebView",additionalInterfaces:["IWithMovablePointer","IWithNative2DMode","IWithPointerDownAndUp"],sidebarSection:"platform",members:[{name:"SetGeolocationPermissionEnabled",type:"method",static:!0,returns:"void",arguments:[{name:"enabled",type:"bool"}],description:'By default, web pages cannot access the device\'s geolocation via JavaScript. However, geolocation\naccess can be granted to **all web pages** via the following steps:\n\n- Call `UwpWebView.SetGeolocationPermissionEnabled(true)` at the start of the app.\n- Enable the "Location" capability in "UWP Player Settings" -> "Publishing Settings" -> "Capabilities".\n- Enable the "Allow apps to access your location" setting in the device\'s Location Privacy Settings.\n\nIf all three of those conditions are met, then when a web page tries to access a location API, the system will\npresent the user with a popup to allow or deny location access. If the user allows access, then\n**all web pages** will be able to access the device location.',example:"void Awake() {\n    #if UNITY_WSA && !UNITY_EDITOR\n        UwpWebView.SetGeolocationPermissionEnabled(true);\n    #endif\n}"}]},{name:"ViewportMaterialView",type:"class",description:"Script that can be attached to a GameObject with a mesh renderer in order to render the contents of the WebView onto the mesh. Note that `WebViewPrefab` takes care of handling this for you, so you only need to deal with `ViewportMaterialView` directly if you create `IWebView` instances outside of a prefab using `Web.CreateWebView()`.",inheritsFrom:"MonoBehaviour",members:[{name:"Initialized",returns:"EventHandler",type:"event",description:"Indicates when the view's `Texture` property has finished initializing after a call to the asynchronous`Init()` method."},{name:"IsVideo",returns:"bool",type:"property",description:"A property set via the Unity editor to indicate that the material should default to the video maerial instead of the viewport material. The video material has a lower render queue than the viewport material to ensure that videos are rendered behind the viewport."},{name:"Texture",returns:"Texture2D",type:"property",description:"The texture for the view, which is a special texture created by `Web.CreateTexture()`. The texture is created asynchronously when `Init()` is called, this property will be `null` until the `Initialized` event is raised. If the webview raises its `TextureChanged` event, this property can be set to the new texture."},{name:"Init",returns:"void",type:"method",description:"Initializes the view with the default material. Initialization is asynchronous, so the `Texture` property will be `null` until the `Initialized` event is raised."}]},{name:"WebGLWebView",type:"class",description:"The [IWebView](/webview/IWebView) implementation used by [2D WebView for WebGL](".concat(ae.WebGL,"). This class also includes extra methods for WebGL-specific functionality."),inheritsFrom:"IWebView",additionalInterfaces:["IWithNative2DMode"],sidebarSection:"platform",members:[{name:"IFrameElementID",type:"property",returns:"string",description:"Gets the unique `id` attribute of the webview's [&lt;iframe&gt;](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe) element.",example:'await canvasWebViewPrefab.WaitUntilInitialized();\n#if UNITY_WEBGL && !UNITY_EDITOR\n    var webGLWebView = canvasWebViewPrefab.WebView as WebGLWebView;\n    Debug.Log("IFrame ID: " + webGLWebView.IFrameElementID);\n#endif'},{name:"CanAccessIFrameContent",type:"method",returns:"bool",description:"Indicates whether 2D WebView can access the content in the webview's iframe. If the iframe's content can't be accessed, then most of the IWebView APIs become disabled. For more information, please see [this article](https://support.vuplex.com/articles/webgl-limitations#cross-origin-limitation).",example:'await canvasWebViewPrefab.WaitUntilInitialized();\n#if UNITY_WEBGL && !UNITY_EDITOR\n    var webGLWebView = canvasWebViewPrefab.WebView as WebGLWebView;\n    if (webGLWebView.CanAccessIFrameContent()) {\n        Debug.Log("The iframe content can be accessed \ud83d\udc4d");\n    }\n#endif'},{name:"ExecuteJavaScriptLocally",type:"method",static:!0,returns:"bool",arguments:[{name:"javaScript",type:"string"}],description:"Executes the given JavaScript locally in the Unity app's window.",example:"#if UNITY_WEBGL && !UNITY_EDITOR\n    // Changes the background color of the Unity app to green.\n    WebGLWebView.ExecuteJavaScriptLocally(\"document.body.style.backgroundColor = 'green';\")\n#endif"},{name:"SetDevicePixelRatio",type:"method",static:!0,returns:"void",arguments:[{name:"devicePixelRatio",type:"float"}],description:"Overrides the value of `devicePixelRatio` that 2D WebView uses to determine the correct size and coordinates of webviews.\n\nStarting in Unity 2019.3, Unity scales the UI by default based on the browser's [window.devicePixelRatio](https://developer.mozilla.org/en-US/docs/Web/API/Window/devicePixelRatio) value. However, it's possible for an application to override the `devicePixelRatio` value by passing a value for `config.devicePixelRatio` to Unity's [createUnityInstance()](https://docs.unity3d.com/2020.3/Documentation/Manual/webgl-templates.html) JavaScript function. In some versions of Unity, the default index.html template sets `config.devicePixelRatio = 1` on mobile. In order for 2D WebView to size and position webviews correctly, it must determine the value of `devicePixelRatio` to use. Since there's no API to get a reference to the Unity instance that the application created with `createUnityInstance()`, 2D WebView tries to detect if `config.devicePixelRatio` was passed to `createUnityInstance()` by checking for the presence of a global `config` JavaScript variable. If there is a global variable named `config` with a `devicePixelRatio` property, then 2D WebView uses that value, otherwise it defaults to using `window.devicePixelRatio`. This approach works for Unity's default index.html templates, but it may not work if the application uses a custom HTML template or changes the name of the `config` variable in the default template. In those cases, the application can use this method to pass the overridden value of `devicePixelRatio` to 2D WebView.",example:"void Awake() {\n    #if UNITY_WEBGL && !UNITY_EDITOR\n        WebGLWebView.SetDevicePixelRatio(1);\n    #endif\n}"},{name:"SetUnityContainerElementId",type:"method",static:!0,returns:"void",arguments:[{name:"containerId",type:"string"}],description:'Explicitly sets the HTML element that 2D WebView should use as the Unity app container. 2D WebView automatically detects the Unity app container element if its ID is set to one of the default values of "unityContainer" or "unity-container". However, if your app uses a custom WebGL template that uses a different ID for the container element, you must call this method to set the container element ID. 2D WebView for WebGL works by adding [&lt;iframe&gt;](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe) elements to the app container, so it\'s unable to function correctly if it\'s unable to find the Unity app container element.',example:'void Awake() {\n    #if UNITY_WEBGL && !UNITY_EDITOR\n        WebGLWebView.SetUnityContainerElementId("your-custom-id");\n    #endif\n}'}]},{name:"WebPluginType",type:"enum",description:"",members:[{name:"Android",type:"value",description:""},{name:"AndroidGecko",type:"value",description:""},{name:"iOS",type:"value",description:""},{name:"Mac",type:"value",description:""},{name:"Mock",type:"value",description:""},{name:"Windows",type:"value",description:""},{name:"UniversalWindowsPlatform",type:"value",description:""}]},{name:"WebViewOptions",type:"struct",description:"Options that can be passed to [WebViewPrefab.Instantiate()](/webview/WebViewPrefab#Instantiate) or [SetOptionsForInitialization()](/webview/WebViewPrefab#SetOptionsForInitialization) to alter the webview that the prefab creates during initialization.",members:[{name:"clickWithoutStealingFocus",returns:"bool",type:"property",description:"If set to `true`, makes it so that clicking on the webview doesn't automatically focus it."},{name:"disableVideo",returns:"bool",type:"property",description:"Sets whether the [fallback video implementation for iOS](https://support.vuplex.com/articles/fallback-video) is disabled. This option is ignored on non-iOS platforms or when [Native 2D Mode](https://support.vuplex.com/articles/native-2d-mode) is enabled."},{name:"preferredPlugins",returns:"WebPluginType[]",type:"property",description:"\n3D WebView automatically selects which native plugin to use based on the build platform and which plugins are installed in the project. However, if you have multiple plugins installed for a single platform, this option can be used to specify which plugin to use in order to override the default behavior.\n\nCurrently, Android is the only platform that supports multiple 3D WebView plugins: `WebPluginType.Android` and `WebPluginType.AndroidGecko`. If both plugins are installed in the same project, `WebPluginType.AndroidGecko` will be used by default. However, you can override this to force `WebPluginType.Android` to be used instead by specifying `preferredPlugins = new WebPluginType[] { WebPluginType.Android }`.\n      "}]},{name:"WebViewPrefab",type:"class",plainTextDescription:"WebViewPrefab is a prefab that makes it easy to view and interact with an IWebView in 3D world space. It takes care of creating an IWebView, displaying its texture, and handling pointer interactions from the user.",description:"WebViewPrefab is a prefab that makes it easy to view and interact with an [IWebView](/webview/IWebView) in 3D world space. It takes care of creating an IWebView, displaying its texture, and handling pointer interactions from the user, like clicking, dragging, and scrolling. So, all you need to do is specify a URL or HTML to load, and then the user can view and interact with it. For use in a [Canvas](https://docs.unity3d.com/2020.1/Documentation/Manual/UICanvas.html), see [CanvasWebViewPrefab](/webview/CanvasWebViewPrefab) instead.\n\n".concat(ce("WebViewPrefab"),"\n  "),inheritsFrom:["MonoBehaviour"],seeAlso:["[CanvasWebViewPrefab](/webview/CanvasWebViewPrefab)","[How clicking and scrolling works](https://support.vuplex.com/articles/clicking)","[IWebView](/webview/IWebView)","[Web (static methods)](/webview/Web)"],members:[].concat(Object(H.a)(de()),[{name:"Collider",returns:"Collider",type:"property",propertyAccessors:{get:!0},description:"Gets the prefab's collider"},{name:"ConvertToScreenPoint",returns:"Vector2",type:"method",arguments:[{name:"worldPosition",type:"Vector3"}],description:"Converts the given world position to a [normalized point](https://support.vuplex.com/articles/normalized-points) in the webview."},{name:"Instantiate",returns:"WebViewPrefab",type:"method",static:!0,arguments:[{type:"float",name:"width"},{type:"float",name:"height"}],description:"Creates a new instance with the given dimensions in Unity units. The [WebView](#WebView) property is available after initialization completes, which is indicated by WaitUntilInitialized() method. A WebViewPrefab's default resolution is 1300px per Unity unit but can be changed by setting [Resolution](#Resolution) property.",example:'// Create a 0.5 x 0.5 instance\nvar webViewPrefab = WebViewPrefab.Instantiate(0.5f, 0.5f);\n// Position the prefab how we want it\nwebViewPrefab.transform.parent = transform;\nwebViewPrefab.transform.localPosition = new Vector3(0, 0f, 0.5f);\nwebViewPrefab.transform.LookAt(transform);\n// Load a URL once the prefab finishes initializing\nawait webViewPrefab.WaitUntilInitialized();\nwebViewPrefab.WebView.LoadUrl("https://vuplex.com");'},{name:"Instantiate",returns:"WebViewPrefab",type:"method",static:!0,arguments:[{type:"float",name:"width"},{type:"float",name:"height"},{type:"WebViewOptions",name:"options"}],description:"Like [Instantiate(float, float](#Instantiate), except it also accepts an object of options flags that can be used to alter the generated webview's behavior."},{name:"Resize",returns:"void",type:"method",arguments:[{type:"float",name:"width"},{type:"float",name:"height"}],description:"Resizes the prefab mesh and webview to the given dimensions in Unity units.",example:"webViewPrefab.Resize(1.2f, 0.5f);",seeAlso:["[Resolution](#Resolution)"]}])},{name:"Web",type:"class",static:!0,description:"`Web` is the top-level static class for the module. It contains static methods for configuring the module and creating resources.",seeAlso:["[WebViewPrefab](/webview/WebViewPrefab)","[CanvasWebViewPrefab](/webview/CanvasWebViewPrefab)","[IWebView](/webview/IWebView)"],members:[{name:"DefaultPluginType",returns:"void",type:"property",propertyAccessors:{get:!0},static:!0,description:"Gets the default 3D WebView plugin type among those installed for the current platform."},{name:"CookieManager",returns:"ICookieManager?",type:"property",propertyAccessors:{get:!0},static:!0,description:"Returns the ICookieManager for managing HTTP cookies, or `null` if ICookieManager isn't supported on the current platform.\n\nICookieManager is supported by all of the 3D WebView packages except for:\n- [3D WebView for Android with Gecko Engine](".concat(ae.AndroidGecko,")\n- [2D WebView for WebGL](").concat(ae.WebGL,")")},{name:"ClearAllData",returns:"void",type:"method",static:!0,description:"Clears all data that persists between webview instances, like cookies, storage, and cached resources.",example:"void Awake() {\n    Web.ClearAllData();\n}",warnings:[Ee,"On Universal Windows Platform, this method is unable to clear cookies due to a UWP limitation."]},{name:"CreateWebView",returns:"IWebView",type:"method",static:!0,description:"Creates a new webview in a platform-agnostic way. After the [IWebView](/webview/IWebView) is created, it must be initialized by calling [Init()](/webview/IWebView#Init) method.",warnings:["[WebViewPrefab](/webview/WebViewPrefab) and [CanvasWebViewPrefab](/webview/CanvasWebViewPrefab) take care of creating and managing an [IWebView](/webview/IWebView) instance for you, so you only need to call this method directly if you need to create a webview outside of a prefab (for example, to connect it to your own custom GameObject)."],example:'var webView = Web.CreateWebView();\n// Initialize the webview to 600px x 300px.\nawait webView.Init(600, 300);\nwebView.LoadUrl("https://vuplex.com");\n// Set the Material attached to this GameObject to display the webview.\nGetComponent<Renderer>().material = webView.CreateMaterial();'},{name:"EnableRemoteDebugging",returns:"void",type:"method",static:!0,description:"Enables [remote debugging](https://support.vuplex.com/articles/how-to-debug-web-content).",example:"void Awake() {\n    Web.EnableRemoteDebugging();\n}",warnings:[Ee],seeAlso:"[WebViewPrefab.RemoteDebuggingEnabled](/webview/WebViewPrefab#RemoteDebuggingEnabled)"},{name:"SetAutoplayEnabled",returns:"void",type:"method",static:!0,arguments:[{name:"enabled",type:"bool"}],description:"By default, browsers block sites from autoplaying video with audio, but this method can be used to enable autoplay.",example:"void Awake() {\n    Web.SetAutoplayEnabled(true);\n}",warnings:[Ee,"This method works for every package except for [3D WebView for UWP](".concat(ae.Uwp,"), because the underlying UWP WebView control doesn't allow autoplaying video with audio.")]},{name:"SetCameraAndMicrophoneEnabled",returns:"void",type:"method",static:!0,arguments:[{name:"enabled",type:"bool"}],description:"By default, web pages cannot access the device's camera or microphone via JavaScript, but this method can be used to grant **all web pages** access to the camera and microphone. This is useful, for example, to enable WebRTC support. Note that on Android, iOS, and UWP, [additional project configuration is needed in order to enable permission for the camera and microphone](https://support.vuplex.com/articles/webrtc).",example:"void Awake() {\n    Web.SetCameraAndMicrophoneEnabled(true);\n}",warnings:[Ee,"On iOS, enabling the camera and microphone is only supported in iOS 14.3 or newer and is only supported in [Native 2D Mode](https://support.vuplex.com/articles/native-2d-mode)."]},{name:"SetIgnoreCertificateErrors",returns:"void",type:"method",static:!0,arguments:[{name:"ignore",type:"bool"}],description:"By default, browsers block https URLs with invalid SSL certificates from being loaded. However, this method can be used to ignore certificate errors.",example:"void Awake() {\n    Web.SetIgnoreCertificateErrors(true);\n}",warnings:[Ee,"This method works for every package except for [3D WebView for UWP](".concat(ae.Uwp,"). For UWP, certificates must be [whitelisted in the Package.appxmanifest file](https://www.suchan.cz/2015/10/displaying-https-page-with-invalid-certificate-in-uwp-webview/).")]},{name:"SetStorageEnabled",returns:"void",type:"method",static:!0,arguments:[{type:"bool",name:"enabled"}],description:'Controls whether data like cookies, localStorage, and cached resources is persisted between webview instances. The default is `true`, but this can be set to `false` to achieve an "incognito mode".',example:"void Awake() {\n    Web.SetStorageEnabled(false);\n}",warnings:[Ee,"On Universal Windows Platform, this method doesn't disable cookies due to a UWP limitation."]},{name:"SetUserAgent",returns:"void",type:"method",static:!0,arguments:[{type:"bool",name:"mobile"}],description:"Globally configures all webviews to use a mobile or desktop\n[User-Agent](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/User-Agent).\nBy default, webviews use the browser engine's default User-Agent, but you\ncan force them to use a mobile User-Agent by calling `Web.SetUserAgent(true)` or a\ndesktop User-Agent with `Web.SetUserAgent(false)`.",example:"void Awake() {\n    // Use a desktop User-Agent\n    Web.SetUserAgent(false);\n}",warnings:[Ee],seeAlso:"[IWithSettableUserAgent](/webview/IWithSettableUserAgent)"},{name:"SetUserAgent",returns:"void",type:"method",static:!0,arguments:[{type:"string",name:"userAgent"}],description:"Globally configures all webviews to use a custom [User-Agent](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/User-Agent).",example:'void Awake() {\n    // Use FireFox\'s User-Agent.\n    Web.SetUserAgent("Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:91.0) Gecko/20100101 Firefox/91.0");\n}',warnings:[Ee],seeAlso:"[IWithSettableUserAgent](/webview/IWithSettableUserAgent)"}]},{name:"AndroidJavaObject",type:"class",description:"",externalLinkUrl:"https://docs.unity3d.com/ScriptReference/AndroidJavaObject.html"},{name:"Collider",type:"class",description:"",externalLinkUrl:"https://docs.unity3d.com/ScriptReference/Collider.html"},{name:"Material",type:"class",description:"",externalLinkUrl:"https://docs.unity3d.com/ScriptReference/Material.html"},{name:"MonoBehaviour",type:"class",description:"",externalLinkUrl:"https://docs.unity3d.com/ScriptReference/MonoBehaviour.html"},{name:"Rect",type:"class",description:"",externalLinkUrl:"https://docs.unity3d.com/ScriptReference/Rect.html"},{name:"Texture2D",type:"class",description:"",externalLinkUrl:"https://docs.unity3d.com/ScriptReference/Texture2D.html"},{name:"Vector2",type:"class",description:"",externalLinkUrl:"https://docs.unity3d.com/ScriptReference/Vector2.html"},{name:"Vector2Int",type:"class",description:"",externalLinkUrl:"https://docs.unity3d.com/ScriptReference/Vector2Int.html"},{name:"Vector3",type:"class",description:"",externalLinkUrl:"https://docs.unity3d.com/ScriptReference/Vector3.html"},{name:"Action",type:"class",description:"",externalLinkUrl:"https://docs.microsoft.com/en-us/dotnet/api/system.action-1"},{name:"Dictionary",type:"class",description:"",externalLinkUrl:"https://docs.microsoft.com/en-us/dotnet/api/system.collections.generic.dictionary-2"},{name:"EventHandler",type:"class",description:"",externalLinkUrl:"https://docs.microsoft.com/en-us/dotnet/api/system.eventhandler-1"},{name:"System.EventArgs",type:"class",description:"",externalLinkUrl:"https://docs.microsoft.com/en-us/dotnet/api/system.eventargs"},{name:"IntPtr",type:"class",description:"",externalLinkUrl:"https://docs.microsoft.com/en-us/dotnet/api/system.intptr"},{name:"List",type:"class",description:"",externalLinkUrl:"https://docs.microsoft.com/en-us/dotnet/api/system.collections.generic.list-1"},{name:"Task",type:"class",description:"",externalLinkUrl:"https://docs.microsoft.com/en-us/dotnet/api/system.threading.tasks.task"}],Ie=n(17),Pe=(n(305),function(e){function t(){return Object(w.a)(this,t),Object(v.a)(this,Object(g.a)(t).apply(this,arguments))}return Object(y.a)(t,e),Object(f.a)(t,[{key:"render",value:function(){var e,t=this.props.example,n="";return"string"===typeof t?n=t.trim():(e=t.title,n=t.code.trim()),i.a.createElement("div",{className:"code-example-box"},i.a.createElement("h4",null,e||"Example"),i.a.createElement("pre",null,i.a.createElement("code",null,n)))}}]),t}(a.Component));function xe(e){if(e)for(var t=e.querySelectorAll("pre code"),n=0;n<t.length;n++)p.a.highlightBlock(t[n])}var ke=function(e){function t(){var e,n;Object(w.a)(this,t);for(var a=arguments.length,r=new Array(a),o=0;o<a;o++)r[o]=arguments[o];return(n=Object(v.a)(this,(e=Object(g.a)(t)).call.apply(e,[this].concat(r))))._componentElement=null,n._renderInterfaceName=function(e){return i.a.createElement("li",{key:e},i.a.createElement(V.a,{to:"/webview/".concat(e)},e))},n._saveRef=function(e){return n._componentElement=e},n}return Object(y.a)(t,e),Object(f.a)(t,[{key:"componentDidMount",value:function(){xe(this._componentElement),s.a.pageview("/webview/additional-interfaces")}},{key:"render",value:function(){return i.a.createElement("div",{className:"page",ref:this._saveRef},i.a.createElement(Ie.a,null,i.a.createElement("title",null,"Additional feature interfaces"),i.a.createElement("meta",{name:"description",content:"Description of 3D WebView's additional feature interfaces."})),i.a.createElement("h1",null,"Advanced feature interfaces"),i.a.createElement("p",null,"The ",i.a.createElement(V.a,{to:"/webview/IWebView"},"IWebView")," interface contains the base webview functionality that is implemented on all platforms. However, there are also additional interfaces that you can use to access advanced functionality on a subset of platforms:"),i.a.createElement("ul",null,this.props.additionalInterfaceNames.map(this._renderInterfaceName)),i.a.createElement("p",null,"Each interface's documentation lists the platforms that support it. To use an interface, cast the IWebView instance to it. If the platform supports the interface, then the cast will succeed and you can call the interface's methods."),i.a.createElement(Pe,{example:'await webViewPrefab.WaitUntilInitialized();\nvar webViewWithPopups = webViewPrefab.WebView as IWithPopups;\nif (webViewWithPopups != null) {\n  webViewWithPopups.SetPopupMode(PopupMode.NotifyWithoutLoading);\n  webViewWithPopups.PopupRequested += (sender, eventArgs) => {\n    Debug.Log("Popup requested: " + eventArgs.Url);\n  };\n}'}))}}]),t}(a.Component),Se=function(){return i.a.createElement(Ie.a,null,i.a.createElement("title",null,"3D WebView: cross-platform web browser for Unity (Android, iOS, Windows, macOS, and UWP / Hololens) | Vuplex"),i.a.createElement("meta",{name:"description",content:"Easily add an interactive web browser to your Unity 3D scenes to display websites and HTML. Works with Android, iOS, Windows, macOS, Oculus Quest, Universal Windows Platform (UWP), and Hololens."}))},Te=[{id:q.UnityWebViewStandalone,name:"3D WebView for Windows and macOS",price:"149.99",nickname:"Windows and macOS"},{id:q.UnityWebViewAndroid,name:"3D WebView for Android",price:"199.99",nickname:"Android"},{id:q.UnityWebViewAndroidGecko,name:"3D WebView for Android with Gecko Engine",price:"199.99",nickname:"Android Gecko"},{id:q.UnityWebViewiOS,name:"3D WebView for iOS",price:"199.99",nickname:"iOS"},{id:q.UnityWebViewUwp,name:"3D WebView for UWP / Hololens",price:"299.99",nickname:"UWP"},{id:q.UnityWebViewWebGL,name:"2D WebView for WebGL",price:"129.99",nickname:"WebGL"}],De=Te;var Ce=Te.reduce(function(e,t){return e[t.id]=t,e},{});function Ue(e){return Ce[e]||null}var Oe=n(62),Ne=n.n(Oe),Le=n(63),Re=n.n(Le),Me=n(64),Fe=n.n(Me),ze=n(65),je=n.n(ze),Ge=n(66),_e=n.n(Ge),He=n(67),Be=n.n(He),Ye=n(68),Je=n.n(Ye),Ke=n(69),qe=n.n(Ke),Qe=n(70),Ze=n.n(Qe),Xe=n(71),$e=n.n(Xe),et=n(44),tt=n.n(et),nt=(n(307),function(e){function t(){var e,n;Object(w.a)(this,t);for(var a=arguments.length,r=new Array(a),o=0;o<a;o++)r[o]=arguments[o];return(n=Object(v.a)(this,(e=Object(g.a)(t)).call.apply(e,[this].concat(r)))).state={leftCustomerIndex:0,containerWidth:0,height:0,carouselHasMoved:!1},n._containerRef=null,n._itemElements=[],n._checkContainerDimensions=function(){if(n._containerRef){var e=n._containerRef.getBoundingClientRect().width;n.state.containerWidth!==e&&n.setState({containerWidth:e}),n._updateHeightIfNeeded()}},n._handleLeftButtonClick=function(){n._disableAutoPlayIfNeeded(),n.setState({leftCustomerIndex:0===n.state.leftCustomerIndex?n._getItems().length-1:n.state.leftCustomerIndex-1,carouselHasMoved:!0})},n._handleRightButtonClick=function(){n._disableAutoPlayIfNeeded(),n._moveRight()},n._moveRight=function(){n.setState({leftCustomerIndex:n.state.leftCustomerIndex===n._getItems().length-1?0:n.state.leftCustomerIndex+1,carouselHasMoved:!0})},n._setContainerRect=function(e){if(n._containerRef=e,e){var t=e.getBoundingClientRect();n.setState({containerWidth:t.width})}},n._renderItem=function(e,t){return i.a.createElement("div",{ref:n._saveItemRef,className:"carousel-component-item",key:t,style:n._getItemStyle(t)},e)},n._saveItemRef=function(e){e&&(n._itemElements.push(e),n._updateHeightIfNeeded())},n}return Object(y.a)(t,e),Object(f.a)(t,[{key:"componentDidMount",value:function(){this._containerCheckIntervalId=setInterval(this._checkContainerDimensions,500),this.props.autoPlayInterval&&(this._autoPlayIntervalId=setInterval(this._moveRight,1e3*this.props.autoPlayInterval))}},{key:"componentWillUnmount",value:function(){clearInterval(this._containerCheckIntervalId),this._disableAutoPlayIfNeeded()}},{key:"render",value:function(){return i.a.createElement("div",{className:"carousel-component"},i.a.createElement("button",{onClick:this._handleLeftButtonClick},i.a.createElement("img",{src:tt.a,alt:"caret pointing left"})),i.a.createElement("div",{style:{height:this.state.height}},i.a.createElement("div",{ref:this._setContainerRect},this._getItems().map(this._renderItem))),i.a.createElement("button",{onClick:this._handleRightButtonClick},i.a.createElement("img",{src:tt.a,alt:"caret pointing right"})))}},{key:"_disableAutoPlayIfNeeded",value:function(){this._autoPlayIntervalId&&(clearInterval(this._autoPlayIntervalId),this._autoPlayIntervalId=void 0)}},{key:"_getItems",value:function(){for(var e=i.a.Children.toArray(this.props.children);e.length<this._quantityVisible+4;)e.push.apply(e,Object(H.a)(i.a.Children.toArray(this.props.children)));return e}},{key:"_getItemStyle",value:function(e){for(var t=this._getItems().length,n=this.state,a=n.containerWidth,i=n.leftCustomerIndex,r=a*(1===this._quantityVisible?1:1/this._quantityVisible-.03),o=1===this._quantityVisible?0:(a-r*this._quantityVisible)/(this._quantityVisible-1),s=[],l=0;l<this._quantityVisible;l++){var c=i+l;c>t-1&&(c-=t),s.push(c)}var d=0,p=0===i?t-1:i-1,u=0===p?t-1:p-1,m=s[s.length-1],h=m===t-1?0:m+1;s.includes(e)?d=s.indexOf(e)*(r+o):d=e===p||e===u?-r-o:a+o;return{width:r,left:d,transition:(s.includes(e)||e===p||e===h)&&this.state.carouselHasMoved?"left 0.5s ease-in-out":"none"}}},{key:"_updateHeightIfNeeded",value:function(){var e=this._itemElements.map(function(e){return e.offsetHeight}),t=Math.max.apply(Math,[0].concat(Object(H.a)(e)));t!==this.state.height&&this.setState({height:t})}},{key:"_quantityVisible",get:function(){return this.props.quantityVisible?this.props.quantityVisible:1}}]),t}(a.Component)),at=(n(309),[{name:"VMWare",imageUrl:$e.a,linkUrl:"https://pathfinder.vmware.com/activity/projectvxr"},{name:"National Aeronautics and Space Administration (NASA)",imageUrl:_e.a,linkUrl:"https://www.nasa.gov",imageStyle:{width:"135%",position:"relative",left:"-10%"}},{name:"HTC Viveport",imageUrl:Ze.a,linkUrl:"https://www.viveport.com"},{name:"Canadian Space Agency (CSA)",imageUrl:Ne.a,linkUrl:"https://www.asc-csa.gc.ca/eng/Default.asp"},{name:"Pro Putt by Topgolf",imageUrl:je.a,linkUrl:"https://www.proputt.com/"},{name:"University of Georgia",imageUrl:qe.a,linkUrl:"https://www.uga.edu"},{name:"Synergy",imageUrl:Je.a,linkUrl:"https://synergyxr.com/"},{name:"Emulate3D from Rockwell Automation",imageUrl:Re.a,linkUrl:"https://www.demo3d.com"},{name:"Glue",imageUrl:Fe.a,linkUrl:"https://glue.work"},{name:"Saxo Bank",imageUrl:Be.a,linkUrl:"https://www.home.saxo"}]),it=function(e){function t(){var e,n;Object(w.a)(this,t);for(var a=arguments.length,r=new Array(a),o=0;o<a;o++)r[o]=arguments[o];return(n=Object(v.a)(this,(e=Object(g.a)(t)).call.apply(e,[this].concat(r))))._renderCustomer=function(e){return i.a.createElement("a",{key:e.name,href:e.linkUrl,target:"_blank"},i.a.createElement("img",{src:e.imageUrl,alt:e.name,style:e.imageStyle}))},n}return Object(y.a)(t,e),Object(f.a)(t,[{key:"render",value:function(){return i.a.createElement("div",{className:"customers-section"},i.a.createElement(nt,{quantityVisible:3},at.map(this._renderCustomer)))}}]),t}(a.Component),rt=(n(311),function(e){function t(){return Object(w.a)(this,t),Object(v.a)(this,Object(g.a)(t).apply(this,arguments))}return Object(y.a)(t,e),Object(f.a)(t,[{key:"render",value:function(){var e=this.props.native2DModeOnly;return i.a.createElement("div",{className:"webview-description"},i.a.createElement("h2",{className:"description"},i.a.createElement("b",null,"Easily display and interact with webpages in ",e?"":"3D or ","2D")," using the Unity web browser plugin ",i.a.createElement("a",{href:"/webview/overview/#featured-customers"},"trusted by ",this.props.numberOfDevelopers||"over 1000"," developers"),". ",this._renderDeveloperSiteReference()," ",this._renderExtraDescriptionParagraphHtml()),i.a.createElement("ul",{className:"feature-list"},i.a.createElement("li",{style:{listStyleType:"'\ud83c\udf10'"}},"Load a webpage ",i.a.createElement("a",{href:"https://developer.vuplex.com/webview/IWebView#LoadUrl"},"from a URL")," or ",i.a.createElement("a",{href:"https://developer.vuplex.com/webview/IWebView#LoadHtml"},"HTML string")),this._renderVideoFeature(),i.a.createElement("li",{style:{listStyleType:"'<>'"}},i.a.createElement("a",{href:"https://blog.vuplex.com/how-to-create-unity-ui-with-html"},"Create UIs with HTML")),this._renderPrefabFeature(),this._renderNative2DModeFeature(),!this.props.omitKeyboardFeature&&i.a.createElement("li",{style:{listStyleType:"'\u2328\ufe0f'"}},"Type with the included ",i.a.createElement("a",{href:"https://developer.vuplex.com/webview/Keyboard"},"on-screen keyboard")," or native keyboard"),i.a.createElement("li",null,"C# source code for a ",i.a.createElement("a",{href:"https://developer.vuplex.com/webview/IWebView"},"unified API")," that works seamlessly across ",i.a.createElement("a",{href:ae.Standalone},"Windows"),", ",i.a.createElement("a",{href:ae.Standalone},"macOS"),", ",i.a.createElement("a",{href:ae.Android},"Android"),", ",i.a.createElement("a",{href:ae.iOS},"iOS"),", ",i.a.createElement("a",{href:ae.WebGL},"WebGL"),", and ",i.a.createElement("a",{href:ae.Uwp},"UWP / Hololens")),this._renderBrowserEngineFeature(),i.a.createElement("li",null,"Comprehensive API for ",i.a.createElement("a",{href:"https://developer.vuplex.com/webview/IWebView#methods-summary"},"controlling the browser")," and listening to ",i.a.createElement("a",{href:"https://developer.vuplex.com/webview/IWebView#events-summary"},"browser events")," ",this.props.webViewApiFeatureExtraTextHtml?i.a.createElement("span",{dangerouslySetInnerHTML:{__html:this.props.webViewApiFeatureExtraTextHtml}}):""),i.a.createElement("li",null,i.a.createElement("a",{href:"https://developer.vuplex.com/webview/IWebView#ExecuteJavaScript"},"Execute JavaScript")),i.a.createElement("li",null,i.a.createElement("a",{href:"https://support.vuplex.com/articles/how-to-send-messages-from-javascript-to-c-sharp"},"Send messages from C# to JavaScript and vice versa")),i.a.createElement("li",null,"View PDFs"),this._renderPlatformSpecificApiFeature(),this._renderTransparentPagesFeature()),this._renderCustomersSection(),i.a.createElement("h2",{id:"examples"},"Examples"),this._renderExamples(),i.a.createElement("h2",{id:"system-requirements"},"System requirements"),this._renderSystemRequirements(),i.a.createElement("h2",{id:"notes-and-limitations"},"Important notes and limitations"),this._renderNotesAndLimitations())}},{key:"_getPlatformName",value:function(e){return Ue(e.id).name.split("for ")[1].split(" with")[0].split(" /")[0]}},{key:"_renderArFoundationExample",value:function(){var e=this.props.exampleOptions;if(!e||e.arFoundation)return i.a.createElement("li",null,i.a.createElement("a",{href:"https://github.com/vuplex/ar-foundation-webview-example"},"AR Foundation example"))}},{key:"_renderBrowserEngineFeature",value:function(){var e=this.props.browserEngineFeatureHtml||'Powered by <a href="https://en.wikipedia.org/wiki/Chromium_(web_browser)">Chromium</a> (currently v90) on Windows and macOS and by the system webview on other platforms';return i.a.createElement("li",null,i.a.createElement("span",{dangerouslySetInnerHTML:{__html:e}}))}},{key:"_renderCustomersSection",value:function(){if(this.props.includeCustomersSection)return i.a.createElement("div",null,i.a.createElement("h2",{id:"featured-customers"},"Featured Customers"),i.a.createElement(it,null))}},{key:"_renderDeveloperSiteReference",value:function(){if(!this.props.omitDeveloperSiteReference)return i.a.createElement("span",null,"See the ",i.a.createElement("a",{href:"https://developer.vuplex.com"},"developer site")," for full documentation.")}},{key:"_renderExamples",value:function(){var e=this.props.exampleOptions&&this.props.exampleOptions.examplesOverrideHtml;return e?i.a.createElement("div",{dangerouslySetInnerHTML:{__html:e}}):i.a.createElement("ul",null,i.a.createElement("li",null,"3D WebView's included demo scenes:",i.a.createElement("ul",null,i.a.createElement("li",null,"SimpleWebViewDemo"),i.a.createElement("li",null,"CanvasWebViewDemo"),i.a.createElement("li",null,"AdvancedWebViewDemo"),i.a.createElement("li",null,"CanvasWorldSpaceDemo"),(!this.props.exampleOptions||this.props.exampleOptions.popupDemo)&&i.a.createElement("li",null,"PopupDemo"))),this._renderOculusExample(),this._renderHololensExample(),this._renderXrInteractionToolkitExample(),this._renderArFoundationExample(),this._renderGoogleVrExample())}},{key:"_renderExtraDescriptionParagraphHtml",value:function(){var e=this.props.extraDescriptionParagraphHtml;if(e)return i.a.createElement("span",{dangerouslySetInnerHTML:{__html:e}})}},{key:"_renderGoogleVrExample",value:function(){var e=this.props.exampleOptions;if(!e||e.googleVr)return i.a.createElement("li",null,i.a.createElement("a",{href:"https://github.com/vuplex/google-vr-webview-example"},"Cardboard example"))}},{key:"_renderHololensExample",value:function(){var e=this.props.exampleOptions;if(!e||e.hololens)return i.a.createElement("li",null,i.a.createElement("a",{href:"https://github.com/vuplex/hololens-webview-example"},"Hololens example"))}},{key:"_renderInterationTypes",value:function(){var e=["click","scroll"],t=this.props.interactionTypes;return t?(t.hover&&e.push("hover"),t.drag&&e.push("drag")):e.push("hover","drag"),"(".concat(e.join(", "),")")}},{key:"_renderNotesAndLimitations",value:function(){var e=this,t=this.props.notesAndLimitationsOptions;if(t){var n=t.productIdForSinglePlatformWarning,a=this._getPlatformName(Ue(n)),r=De.reduce(function(t,n){var i=e._getPlatformName(n),r=t.find(function(e){return e.platformName===i});return i===a||r||t.push({platformName:i,url:ae[n.id]}),t},[]),o=t.productIdForSinglePlatformWarning||q.UnityWebViewStandalone;r.push({url:"".concat(x.Store,"/cart/?products=").concat(o),platformName:"create a custom bundle"});var s=r.map(function(e){return'<a href="'.concat(e.url,'">').concat(e.platformName,"</a>")});s[s.length-1]="or "+s[s.length-1];var l=s.join(", ");return i.a.createElement("ul",null,i.a.createElement("li",null,"Product downloads are provided through the ",i.a.createElement("a",{href:x.Dashboard},"Vuplex Developer Dashboard"),"."),i.a.createElement("li",null,"This package only supports ",a,". To support other platforms, you can install additional 3D WebView packages (",i.a.createElement("span",{dangerouslySetInnerHTML:{__html:l}}),"). All of the 3D WebView packages work seamlessly together, so all you need to do is install them into the same project, and then 3D WebView automatically detects and uses the correct plugin at runtime and build time."),i.a.createElement("li",null,"3D WebView's native ",t.precompiledLibrariesName," plugins are provided as precompiled libraries, and the native source code for them is not provided."),t.nameOfLibrariesThatCannotRunOnPc&&i.a.createElement("li",null,"3D WebView's native ",t.nameOfLibrariesThatCannotRunOnPc," plugins can't run in the editor, so a ",i.a.createElement("a",{href:"https://support.vuplex.com/articles/mock-webview"},"mock webview implementation")," is used by default while running in the editor. However, you can actually load and render real web content in the editor by also installing ",i.a.createElement("a",{href:ae.Standalone},"3D WebView for Windows and macOS")," into the project."),t.html.map(function(e){return i.a.createElement("li",{key:e.substr(0,50)},i.a.createElement("span",{dangerouslySetInnerHTML:{__html:e}}))}))}return i.a.createElement("ul",null,i.a.createElement("li",null,"Licensed primarily under the ",i.a.createElement("a",{href:"https://vuplex.com/commercial-library-license"},"Vuplex Commercial Library License")," with additional licenses for open source components where noted."),i.a.createElement("li",null,"3D WebView's native plugins are provided as precompiled libraries, and the native source code for them is not included."),i.a.createElement("li",null,i.a.createElement("a",{href:ae.Standalone+"#notes-and-limitations"},"Windows / macOS limitations")),i.a.createElement("li",null,i.a.createElement("a",{href:ae.Android+"#notes-and-limitations"},"Android limitations")),i.a.createElement("li",null,i.a.createElement("a",{href:ae.AndroidGecko+"#notes-and-limitations"},"Android Gecko limitations")),i.a.createElement("li",null,i.a.createElement("a",{href:ae.iOS+"#notes-and-limitations"},"iOS limitations")),i.a.createElement("li",null,i.a.createElement("a",{href:ae.WebGL+"#notes-and-limitations"},"WebGL limitations")),i.a.createElement("li",null,i.a.createElement("a",{href:ae.Uwp+"#notes-and-limitations"},"Universal Windows Platform limitations")))}},{key:"_renderSystemRequirements",value:function(){var e=this.props.systemRequirementsHtml;return e?i.a.createElement("ul",null,e.map(function(e){return i.a.createElement("li",{key:e.substr(0,50)},i.a.createElement("span",{dangerouslySetInnerHTML:{__html:e}}))})):i.a.createElement("ul",null,i.a.createElement("li",null,i.a.createElement("a",{href:ae.Standalone+"#system-requirements"},"Windows / macOS requirements")),i.a.createElement("li",null,i.a.createElement("a",{href:ae.Android+"#system-requirements"},"Android requirements")),i.a.createElement("li",null,i.a.createElement("a",{href:ae.AndroidGecko+"#system-requirements"},"Android Gecko requirements")),i.a.createElement("li",null,i.a.createElement("a",{href:ae.iOS+"#system-requirements"},"iOS requirements")),i.a.createElement("li",null,i.a.createElement("a",{href:ae.WebGL+"#system-requirements"},"WebGL requirements")),i.a.createElement("li",null,i.a.createElement("a",{href:ae.Uwp+"#system-requirements"},"Universal Windows Platform requirements")))}},{key:"_renderOculusExample",value:function(){var e=this.props.exampleOptions;if(!e||e.oculus)return i.a.createElement("li",null,i.a.createElement("a",{href:"https://github.com/vuplex/oculus-webview-example"},"Oculus example")," (Quest, Rift)")}},{key:"_renderNative2DModeFeature",value:function(){var e=this.props.native2DMode;if(e){var t="string"===typeof e?" ".concat(e):void 0;return i.a.createElement("li",{style:{listStyleType:"'\ud83d\udcf1'"}},"Includes a ",i.a.createElement("a",{href:"https://support.vuplex.com/articles/native-2d-mode"},"Native 2D Mode"),t)}}},{key:"_renderPlatformSpecificApiFeature",value:function(){var e=this.props.webViewClassDocumentationUrl;return e?i.a.createElement("li",null,"Also includes ",i.a.createElement("a",{href:e},"extra platform-specific APIs")):i.a.createElement("li",null,"Also includes extra platform-specific APIs (",i.a.createElement("a",{href:"https://developer.vuplex.com/webview/StandaloneWebView"},"Windows / macOS"),", ",i.a.createElement("a",{href:"https://developer.vuplex.com/webview/AndroidWebView"},"Android"),", ",i.a.createElement("a",{href:"https://developer.vuplex.com/webview/AndroidGeckoWebView"},"Android Gecko"),", ",i.a.createElement("a",{href:"https://developer.vuplex.com/webview/iOSWebView"},"iOS"),")")}},{key:"_renderPrefabFeature",value:function(){var e;return e=this.props.native2DModeOnly?i.a.createElement("span",null,"Get started fast with the 2D ",i.a.createElement("a",{href:"https://developer.vuplex.com/webview/CanvasWebViewPrefab"},"CanvasWebViewPrefab")):i.a.createElement("span",null,"Get started fast with the 3D ",i.a.createElement("a",{href:"https://developer.vuplex.com/webview/WebViewPrefab"},"WebViewPrefab")," or 2D ",i.a.createElement("a",{href:"https://developer.vuplex.com/webview/CanvasWebViewPrefab"},"CanvasWebViewPrefab"),", which render to a Texture2D and ",i.a.createElement("a",{href:"https://support.vuplex.com/articles/clicking"},"handle user interactions")," ",this._renderInterationTypes()),i.a.createElement("li",{style:{listStyleType:"'\u26a1\ufe0f'"}},e)}},{key:"_renderTransparentPagesFeature",value:function(){if(this.props.supportsTransparentPages)return i.a.createElement("li",null,"Supports ",i.a.createElement("a",{href:"https://support.vuplex.com/articles/how-to-make-a-webview-transparent"},"transparent pages"))}},{key:"_renderVideoFeature",value:function(){if(!this.props.videoNotSupported){var e=this.props.videoFeatureHtml?i.a.createElement("span",{dangerouslySetInnerHTML:{__html:this.props.videoFeatureHtml}}):"Watch videos and YouTube";return i.a.createElement("li",{style:{listStyleType:"'\ud83d\udcfa'"}},e)}}},{key:"_renderXrInteractionToolkitExample",value:function(){var e=this.props.exampleOptions;if(!e||e.xrInteractionToolkit)return i.a.createElement("li",null,i.a.createElement("a",{href:"https://github.com/vuplex/xrit-webview-example"},"XR Interaction Toolkit example"))}}]),t}(a.Component)),ot=n(45),st=n.n(ot),lt=n(72),ct=n.n(lt),dt=n(73),pt=n.n(dt),ut=n(74),mt=n.n(ut),ht=n(75),bt=n.n(ht),wt=(n(313),function(e){function t(){return Object(w.a)(this,t),Object(v.a)(this,Object(g.a)(t).apply(this,arguments))}return Object(y.a)(t,e),Object(f.a)(t,[{key:"render",value:function(){return i.a.createElement("div",{className:"store-links"},i.a.createElement("a",{className:"standalone",href:ae.Standalone},i.a.createElement("img",{src:st.a,alt:"Windows logo"}),i.a.createElement("img",{src:ct.a,alt:"Mac logo"}),"Windows + Mac"),i.a.createElement("div",{className:"android"},i.a.createElement("div",null,i.a.createElement("img",{src:pt.a,alt:"Android logo"}),"Android"),i.a.createElement("div",{className:"dropdown"},i.a.createElement("div",null,i.a.createElement("a",{href:ae.Android},"For mobile"),i.a.createElement("a",{href:ae.AndroidGecko},"For VR headsets")))),i.a.createElement("a",{className:"ios",href:ae.iOS},i.a.createElement("img",{src:mt.a,alt:"Apple logo"}),"iOS"),i.a.createElement("a",{className:"webgl",href:ae.WebGL},i.a.createElement("img",{src:bt.a,alt:"HTML5 logo"}),"WebGL"),i.a.createElement("a",{className:"uwp",href:ae.Uwp},i.a.createElement("img",{src:st.a,alt:"Hololens logo"}),"UWP / Hololens"))}}]),t}(a.Component)),ft=n(76),vt=n.n(ft),gt=(n(315),function(e){function t(){var e,n;Object(w.a)(this,t);for(var a=arguments.length,i=new Array(a),r=0;r<a;r++)i[r]=arguments[r];return(n=Object(v.a)(this,(e=Object(g.a)(t)).call.apply(e,[this].concat(i)))).state={showAndroidDropdown:!1},n}return Object(y.a)(t,e),Object(f.a)(t,[{key:"componentDidMount",value:function(){s.a.pageview("/webview/overview")}},{key:"render",value:function(){return i.a.createElement("div",{className:"webview-overview"},i.a.createElement(Se,null),i.a.createElement("h1",null,"3D WebView: the ultimate cross-platform web browser for Unity"),i.a.createElement("h2",{className:"store-header"},"Buy from the store:"),i.a.createElement(wt,null),i.a.createElement("video",{src:vt.a,autoPlay:!0,muted:!0,loop:!0,playsInline:!0}),i.a.createElement(rt,{omitDeveloperSiteReference:!0,native2DMode:"for Android, iOS, and WebGL",includeCustomersSection:!0}))}}]),t}(a.Component)),yt=(n(36),n(318),function(e){function t(){return Object(w.a)(this,t),Object(v.a)(this,Object(g.a)(t).apply(this,arguments))}return Object(y.a)(t,e),Object(f.a)(t,[{key:"componentDidMount",value:function(){s.a.pageview("/webview/getting-started")}},{key:"render",value:function(){return i.a.createElement("div",{className:"page getting-started"},i.a.createElement(Ie.a,null,i.a.createElement("title",null,"Getting Started | 3D WebView"),i.a.createElement("meta",{name:"description",content:"How to get started with Vuplex 3D WebView for Unity."})),i.a.createElement("h1",null,"Getting started"),i.a.createElement("ol",null,i.a.createElement("li",null,"First, purchase and import one or more 3D WebView packages:",i.a.createElement("ul",null,i.a.createElement("li",null,i.a.createElement("a",{href:ae.Standalone},"Windows and macOS")),i.a.createElement("li",null,i.a.createElement("a",{href:ae.Android},"Android mobile")),i.a.createElement("li",null,i.a.createElement("a",{href:ae.AndroidGecko},"Android VR headset")," (",i.a.createElement(V.a,{to:"/webview/android-comparison"},"comparison"),")"),i.a.createElement("li",null,i.a.createElement("a",{href:ae.iOS},"iOS")),i.a.createElement("li",null,i.a.createElement("a",{href:ae.WebGL},"WebGL")),i.a.createElement("li",null,i.a.createElement("a",{href:ae.Uwp},"Universal Windows Platform (UWP)")))),i.a.createElement("li",null,"Next, add an example scene to your build:",i.a.createElement("ul",null,i.a.createElement("li",null,"3D WebView's included demo scenes:",i.a.createElement("ul",null,i.a.createElement("li",null,"SimpleWebViewDemo"),i.a.createElement("li",null,"CanvasWebViewDemo"),i.a.createElement("li",null,"CanvasWorldSpaceDemo"),i.a.createElement("li",null,"AdvancedWebViewDemo"),i.a.createElement("li",null,"PopupDemo"))),i.a.createElement("li",null,i.a.createElement("a",{href:"https://github.com/vuplex/oculus-webview-example"},"Oculus example")," (Quest, Rift)"),i.a.createElement("li",null,i.a.createElement("a",{href:"https://github.com/vuplex/xrit-webview-example"},"XR Interaction Toolkit example")),i.a.createElement("li",null,i.a.createElement("a",{href:"https://github.com/vuplex/hololens-webview-example"},"Hololens example")),i.a.createElement("li",null,i.a.createElement("a",{href:"https://github.com/vuplex/ar-foundation-webview-example"},"AR Foundation example")),i.a.createElement("li",null,i.a.createElement("a",{href:"https://github.com/vuplex/google-vr-webview-example"},"Cardboard example")))),i.a.createElement("li",null,i.a.createElement("strong",{id:"windows"},"Windows settings:"),i.a.createElement("ol",{type:"a"},i.a.createElement("li",null,'Set "Graphics APIs for Windows" to "Direct3D11"'))),i.a.createElement("li",null,i.a.createElement("strong",{id:"mac"},"macOS settings:"),i.a.createElement("ol",{type:"a"},i.a.createElement("li",null,'Set "Graphics APIs for Mac" to "Metal"'),i.a.createElement("li",null,'Verify that "Metal Editor Support" is enabled'))),i.a.createElement("li",null,i.a.createElement("strong",{id:"android"},"Android settings:"),i.a.createElement("ol",{type:"a"},i.a.createElement("li",null,'Set "Graphics API" to "OpenGLES3" or "OpenGLES2"'),i.a.createElement("li",null,'Set "Minimum API Level" to "Android 5.0 Lollipop" (or higher)'),i.a.createElement("li",null,'Verify that the "Build System" is set to "Gradle" (default)'))),i.a.createElement("li",null,i.a.createElement("strong",{id:"ios"},"iOS settings:"),i.a.createElement("ol",{type:"a"},i.a.createElement("li",null,"No changes to the Unity player settings are required for iOS"))),i.a.createElement("li",null,i.a.createElement("strong",{id:"webgl"},"WebGL settings:"),i.a.createElement("ol",{type:"a"},i.a.createElement("li",null,"No changes to the Unity player settings are required for WebGL"))),i.a.createElement("li",null,i.a.createElement("strong",{id:"uwp"},"Universal Windows Platform (UWP) settings:"),i.a.createElement("ol",{type:"a"},i.a.createElement("li",null,'Set "Build Type" to "XAML Project" (this is required to support webviews)'),i.a.createElement("li",null,'Disable "Auto Graphics API"'),i.a.createElement("li",null,'Set "Graphics APIs" to "Direct3D11"'),i.a.createElement("li",null,'If targeting Hololens 2, disable "Graphics Jobs"'),i.a.createElement("li",null,'In "Publishing Settings", enable the following capabilities: "InternetClient", "SpatialPerception"'),i.a.createElement("li",null,"(optional) If using ",i.a.createElement("a",{href:"https://github.com/microsoft/MixedRealityToolkit-Unity"},"Mixed Reality Toolkit (MRTK)"),', add the following symbol to "Scripting Define Symbols" to enable MRTK pointer compatibility: ',i.a.createElement("code",null,"VUPLEX_MRTK")))),i.a.createElement("li",null,"Now you can run the example scene in the editor or build and deploy it to your device!")),i.a.createElement("h2",null,"Next steps"),i.a.createElement("ul",null,i.a.createElement("li",null,"Check out the documentation for more details on loading and interacting with web content:",i.a.createElement("ul",null,i.a.createElement("li",null,i.a.createElement(V.a,{to:"/webview/IWebView"},"IWebView")),i.a.createElement("li",null,i.a.createElement(V.a,{to:"/webview/WebViewPrefab"},"WebViewPrefab")),i.a.createElement("li",null,i.a.createElement(V.a,{to:"/webview/CanvasWebViewPrefab"},"CanvasWebViewPrefab")),i.a.createElement("li",null,i.a.createElement(V.a,{to:"/webview/Web"},"Web")))),i.a.createElement("li",null,i.a.createElement(V.a,{to:"/webview/troubleshooting"},"Troubleshooting tips")),i.a.createElement("li",null,"Has 3D WebView been helpful? If so, please take a minute to ",i.a.createElement("a",{href:"https://assetstore.unity.com/packages/tools/gui/3d-webview-for-windows-and-macos-154144#reviews"},"rate it on the Asset Store"),"! It doesn't have many ratings, so leaving one for me would have a huge impact, and it would mean a lot to me:",i.a.createElement("ul",null,i.a.createElement("li",null,i.a.createElement("a",{href:"https://assetstore.unity.com/packages/tools/gui/3d-webview-for-windows-and-macos-154144#reviews"},"Windows and macOS")),i.a.createElement("li",null,i.a.createElement("a",{href:"https://assetstore.unity.com/packages/tools/gui/3d-webview-for-android-137030#reviews"},"Android")),i.a.createElement("li",null,i.a.createElement("a",{href:"https://assetstore.unity.com/packages/tools/gui/3d-webview-for-android-with-gecko-engine-158778#reviews"},"Android Gecko")),i.a.createElement("li",null,i.a.createElement("a",{href:"https://assetstore.unity.com/packages/tools/gui/3d-webview-for-android-and-ios-135383#reviews"},"Android and iOS")),i.a.createElement("li",null,i.a.createElement("a",{href:"https://assetstore.unity.com/packages/tools/gui/3d-webview-for-ios-137040#reviews"},"iOS")),i.a.createElement("li",null,i.a.createElement("a",{href:"https://assetstore.unity.com/packages/tools/gui/2d-webview-for-webgl-web-browser-iframe-202522#reviews"},"WebGL")),i.a.createElement("li",null,i.a.createElement("a",{href:"https://assetstore.unity.com/packages/tools/gui/3d-webview-for-uwp-hololens-166365#reviews"},"UWP / Hololens"))))))}}]),t}(a.Component)),Wt=n(14),Vt=n.n(Wt);function Et(e,t,n){var a=e.find(function(e){return e.name===t});return a?a.externalLinkUrl?i.a.createElement("a",{key:t,href:a.externalLinkUrl},n||t):i.a.createElement(V.a,{key:t,to:"/webview/".concat(t)},n||t):null}n(399);var At=function(e){function t(){return Object(w.a)(this,t),Object(v.a)(this,Object(g.a)(t).apply(this,arguments))}return Object(y.a)(t,e),Object(f.a)(t,[{key:"render",value:function(){var e=this.props.warnings;if(e&&e.length)return 1===e.length?i.a.createElement("div",{className:"warning-box"},i.a.createElement("h4",null,"Important note"),i.a.createElement(Vt.a,{source:e[0]})):i.a.createElement("div",{className:"warning-box"},i.a.createElement("h4",null,"Important notes"),i.a.createElement("ul",null,e.map(function(e){return i.a.createElement("li",{key:e.substr(0,10)},i.a.createElement(Vt.a,{source:e}))})))}}]),t}(a.Component),It=(n(401),function(e){function t(){var e,n;Object(w.a)(this,t);for(var a=arguments.length,r=new Array(a),o=0;o<a;o++)r[o]=arguments[o];return(n=Object(v.a)(this,(e=Object(g.a)(t)).call.apply(e,[this].concat(r))))._renderMember=function(e){return i.a.createElement("div",{key:e.name+JSON.stringify(e.arguments)},i.a.createElement("h3",{id:e.name},i.a.createElement("a",{href:"#".concat(e.name)},e.name)),n._renderFullName(e),n._renderDescription(e),e.example&&i.a.createElement(Pe,{example:e.example}),e.warnings&&i.a.createElement(At,{warnings:e.warnings}),n._renderSeeAlso(e))},n}return Object(y.a)(t,e),Object(f.a)(t,[{key:"render",value:function(){return i.a.createElement("div",{className:"member-section"},i.a.createElement("h2",null,this.props.title),this.props.members.map(this._renderMember))}},{key:"_getNodesForType",value:function(e){var t=this,n=e.replace("[]","").replace("?",""),a=Et(this.props.fileReferenceDefinitions,n,e);return a?[a]:e.split(/(<|>)/g).filter(function(e){return e}).map(function(e){return"<"===e||">"===e?e:Et(t.props.fileReferenceDefinitions,e.replace("[]",""),e)||e})}},{key:"_renderDescription",value:function(e){var t=e.description;return"string"===typeof t?i.a.createElement(Vt.a,{className:"description",source:t}):i.a.createElement("div",{className:"description"},t)}},{key:"_renderFullName",value:function(e){var t=this;if("value"!==e.type){var n=(e.arguments||[]).reduce(function(e,n,a){a&&e.push(", ");var r=n.name,o=n.type,s=n.defaultValue;return e.push(i.a.createElement("span",{key:r},t._getNodesForType(o)," ",r,s?" = ".concat(s):"")),e},[]);return i.a.createElement("code",{className:"full-name"},e.static?"static":null," ",e.returns?this._getNodesForType(e.returns):null," ",e.name,"method"===e.type?i.a.createElement("span",null,"(",n,")"):null," ",this._renderPropertyAccessors(e))}}},{key:"_renderPropertyAccessors",value:function(e){var t=e.propertyAccessors;if(t){var n=[];return t.get&&n.push("get;"),t.set&&n.push("set;"),"{ ".concat(n.join(" ")," }")}}},{key:"_renderSeeAlso",value:function(e){var t=e.seeAlso;if(t&&t.length)return Array.isArray(t)?i.a.createElement("div",{className:"seealso"},i.a.createElement("strong",null,"See also:"),i.a.createElement("ul",null,t.map(function(e){return i.a.createElement("li",{key:e},i.a.createElement(Vt.a,{source:e}))}))):i.a.createElement(Vt.a,{className:"seealso",source:"**See also**: ".concat(t)})}}]),t}(a.Component));function Pt(e){var t=e.name;if(e.returns&&(t="".concat(e.returns," ").concat(t)),"method"===e.type){var n="";e.arguments&&(n=e.arguments.map(function(e){var t=e.defaultValue?" = ".concat(e.defaultValue):"";return"".concat(e.type," ").concat(e.name).concat(t)}).join(", ")),t+="(".concat(n,")")}return e.static&&(t="static "+t),t}n(403);var xt=function(e){function t(){var e,n;Object(w.a)(this,t);for(var a=arguments.length,r=new Array(a),o=0;o<a;o++)r[o]=arguments[o];return(n=Object(v.a)(this,(e=Object(g.a)(t)).call.apply(e,[this].concat(r))))._renderMember=function(e){return n.props.omitLinks?i.a.createElement("div",{key:e.name+JSON.stringify(e.arguments)},Pt(e)):i.a.createElement("div",{key:e.name+JSON.stringify(e.arguments)},i.a.createElement(ve,{to:"#".concat(e.name),behavior:"smooth"},Pt(e)))},n}return Object(y.a)(t,e),Object(f.a)(t,[{key:"render",value:function(){return i.a.createElement("div",{className:"member-table"},i.a.createElement("h3",{id:this.props.urlFragment},this.props.title),this.props.members.map(this._renderMember))}}]),t}(a.Component);n(405);var kt=function(e){function t(){return Object(w.a)(this,t),Object(v.a)(this,Object(g.a)(t).apply(this,arguments))}return Object(y.a)(t,e),Object(f.a)(t,[{key:"render",value:function(){var e=this,t=this.props.fileReferenceNames;return i.a.createElement("div",{className:"additional-interfaces"},i.a.createElement("span",null,this.props.title||"Additional interfaces",": ",i.a.createElement(V.a,{className:"help-link",to:"/webview/additional-interfaces"},"?")),i.a.createElement("ul",null,t.map(function(t){return i.a.createElement("li",{key:t},Et(e.props.fileReferenceDefinitions,t))})))}}]),t}(a.Component),St=(n(407),function(e){function t(){var e,n;Object(w.a)(this,t);for(var a=arguments.length,i=new Array(a),r=0;r<a;r++)i[r]=arguments[r];return(n=Object(v.a)(this,(e=Object(g.a)(t)).call.apply(e,[this].concat(i))))._componentElement=null,n._saveRef=function(e){return n._componentElement=e},n._sortByName=function(e,t){return e.name>t.name?1:-1},n}return Object(y.a)(t,e),Object(f.a)(t,[{key:"componentDidMount",value:function(){xe(this._componentElement),s.a.pageview("/webview/".concat(this.props.name))}},{key:"componentDidUpdate",value:function(){xe(this._componentElement)}},{key:"render",value:function(){var e=this.props.members||[],t=e.filter(function(e){return"event"===e.type}).sort(this._sortByName),n=e.filter(function(e){return"method"===e.type}).sort(this._sortByName),a=e.filter(function(e){return"property"===e.type}).sort(this._sortByName),r=e.filter(function(e){return"value"===e.type}).sort(this._sortByName),o=!!r.find(function(e){return!!e.description}),s=this.props.plainTextDescription||("string"===typeof this.props.description?function(e,t){(t=t||{}).listUnicodeChar=!!t.hasOwnProperty("listUnicodeChar")&&t.listUnicodeChar,t.stripListLeaders=!t.hasOwnProperty("stripListLeaders")||t.stripListLeaders,t.gfm=!t.hasOwnProperty("gfm")||t.gfm,t.useImgAltText=!t.hasOwnProperty("useImgAltText")||t.useImgAltText;var n=e||"";n=n.replace(/^(-\s*?|\*\s*?|_\s*?){3,}\s*$/gm,"");try{t.stripListLeaders&&(n=t.listUnicodeChar?n.replace(/^([\s\t]*)([\*\-\+]|\d+\.)\s+/gm,t.listUnicodeChar+" $1"):n.replace(/^([\s\t]*)([\*\-\+]|\d+\.)\s+/gm,"$1")),t.gfm&&(n=n.replace(/\n={2,}/g,"\n").replace(/~{3}.*\n/g,"").replace(/~~/g,"").replace(/`{3}.*\n/g,"")),n=n.replace(/<[^>]*>/g,"").replace(/^[=\-]{2,}\s*$/g,"").replace(/\[\^.+?\](\: .*?$)?/g,"").replace(/\s{0,2}\[.*?\]: .*?$/g,"").replace(/\!\[(.*?)\][\[\(].*?[\]\)]/g,t.useImgAltText?"$1":"").replace(/\[(.*?)\][\[\(].*?[\]\)]/g,"$1").replace(/^\s{0,3}>\s?/g,"").replace(/^\s{1,2}\[(.*?)\]: (\S+)( ".*?")?\s*$/g,"").replace(/^(\n)?\s{0,}#{1,6}\s+| {0,}(\n)?\s{0,}#{0,} {0,}(\n)?\s{0,}$/gm,"$1$2$3").replace(/([\*_]{1,3})(\S.*?\S{0,1})\1/g,"$2").replace(/([\*_]{1,3})(\S.*?\S{0,1})\1/g,"$2").replace(/(`{3,})(.*?)\1/gm,"$2").replace(/`(.+?)`/g,"$1").replace(/\n{2,}/g,"\n\n")}catch(a){return console.error(a),e}return n}(this.props.description):"3D WebView documentation for ".concat(this.props.name));return i.a.createElement("div",{className:"file-reference",ref:this._saveRef},i.a.createElement(Ie.a,null,i.a.createElement("title",null,this.props.name," | 3D WebView Documentation"),i.a.createElement("meta",{name:"description",content:s})),i.a.createElement("div",null,i.a.createElement("h1",null,this.props.name),i.a.createElement("h2",null,this.props.static?"static ":"",this.props.type,this._renderBaseClasses()),i.a.createElement("h3",null,"Namespace: Vuplex.WebView")),this._renderAdditionalInterfaceInfo(),this._renderDescription(),this.props.example&&i.a.createElement(Pe,{example:this.props.example}),this.props.warnings&&i.a.createElement(At,{warnings:this.props.warnings}),this._renderSeeAlso(),i.a.createElement("section",{className:"member-summary"},!!e.length&&i.a.createElement("h2",null,"Summary"),!!a.length&&i.a.createElement(xt,{title:"Public properties",urlFragment:"properties-summary",members:a}),!!n.length&&i.a.createElement(xt,{title:"Public methods",urlFragment:"methods-summary",members:n}),!!t.length&&i.a.createElement(xt,{title:"Public events",urlFragment:"events-summary",members:t}),!!r.length&&i.a.createElement(xt,{title:"Values",members:r,urlFragment:"values-summary",omitLinks:!o})),!!a.length&&i.a.createElement(It,{title:"Public properties",members:a,fileReferenceDefinitions:this.props.fileReferenceDefinitions}),!!n.length&&i.a.createElement(It,{title:"Public methods",members:n,fileReferenceDefinitions:this.props.fileReferenceDefinitions}),!!t.length&&i.a.createElement(It,{title:"Public events",members:t,fileReferenceDefinitions:this.props.fileReferenceDefinitions}),!!o&&i.a.createElement(It,{title:"Values",members:r,fileReferenceDefinitions:this.props.fileReferenceDefinitions}))}},{key:"_renderAdditionalInterfaceInfo",value:function(){var e=this,t=this.props.additionalInterfaces;if(t&&t.length)return i.a.createElement(kt,{fileReferenceDefinitions:this.props.fileReferenceDefinitions,fileReferenceNames:t});if("interface"===this.props.type){var n=this.props.fileReferenceDefinitions.reduce(function(t,n){var a=n.additionalInterfaces;return a&&-1!==a.indexOf(e.props.name)&&t.push(n.name),t},[]);return n.length?i.a.createElement(kt,{title:"Implemented by",fileReferenceDefinitions:this.props.fileReferenceDefinitions,fileReferenceNames:n}):void 0}}},{key:"_renderBaseClasses",value:function(){var e=this,t=this.props.inheritsFrom;if(t&&t.length){var n=("string"===typeof this.props.inheritsFrom?[t]:t).reduce(function(t,n,a){a&&t.push(", ");var i=Et(e.props.fileReferenceDefinitions,n);return t.push(i||n),t},[]);return i.a.createElement("span",null," : ",n)}}},{key:"_renderDescription",value:function(){var e=this.props.description;return"string"===typeof e?i.a.createElement(Vt.a,{source:e}):e}},{key:"_renderSeeAlso",value:function(){var e=this.props.seeAlso;if(e&&e.length)return Array.isArray(e)?i.a.createElement("div",{className:"seealso"},i.a.createElement("strong",null,"See also:"),i.a.createElement("ul",null,e.map(function(e){return i.a.createElement("li",{key:e},i.a.createElement(Vt.a,{source:e}))}))):i.a.createElement(Vt.a,{className:"seealso",source:"**See also**: ".concat(e)})}}]),t}(a.Component)),Tt=n(8),Dt=n.n(Tt),Ct=n(15),Ut=n(30),Ot=(n(411),function(e){function t(){return Object(w.a)(this,t),Object(v.a)(this,Object(g.a)(t).apply(this,arguments))}return Object(y.a)(t,e),Object(f.a)(t,[{key:"render",value:function(){var e=this.props.color||"#12bae9",t=this.props.size||"80px",n="calc(".concat(t," * 0.8)"),a={width:n,height:n,border:"calc(".concat(t," / 10) solid ").concat(e),borderColor:"".concat(e," transparent transparent transparent"),margin:"calc(".concat(t," / 10)")};return i.a.createElement("div",{className:"spinner ".concat(this.props.className||""),style:Object(Ut.a)({width:t,height:t},this.props.style)},i.a.createElement("div",{style:a}),i.a.createElement("div",{style:a}),i.a.createElement("div",{style:a}),i.a.createElement("div",{style:a}))}}]),t}(a.Component)),Nt=function(e){function t(e,n){var a,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:500;return Object(w.a)(this,t),(a=Object(v.a)(this,Object(g.a)(t).call(this,e)))._statusCode=i,n&&(a.userMessage="string"===typeof n?n:e),a}return Object(y.a)(t,e),Object(f.a)(t,[{key:"toJson",value:function(){return JSON.stringify({message:this.message,userMessage:this.userMessage})}},{key:"statusCode",get:function(){return this._statusCode}}]),t}(Object(R.a)(Error));function Lt(e){return Rt.apply(this,arguments)}function Rt(){return(Rt=Object(Ct.a)(Dt.a.mark(function e(t){var n,a;return Dt.a.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return n={},e.prev=1,e.next=4,t.json();case 4:n=e.sent,e.next=9;break;case 7:e.prev=7,e.t0=e.catch(1);case 9:return a=n.message||"API responded with status code ".concat(t.status),e.abrupt("return",new Nt(a,n.userMessage,t.status));case 11:case"end":return e.stop()}},e,this,[[1,7]])}))).apply(this,arguments)}var Mt=function(){function e(){Object(w.a)(this,e)}return Object(f.a)(e,null,[{key:"authenticatedFetch",value:function(){var t=Object(Ct.a)(Dt.a.mark(function t(n,a){var i,r;return Dt.a.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:if(i=z.getSession()){t.next=4;break}throw L(),new M;case 4:return t.next=6,e.fetch(n,Object(Ut.a)({headers:{Authorization:i.token}},a));case 6:if(401!==(r=t.sent).status){t.next=10;break}throw L(),new M;case 10:return t.abrupt("return",r);case 11:case"end":return t.stop()}},t,this)}));return function(e,n){return t.apply(this,arguments)}}()},{key:"authenticatedGetJson",value:function(){var e=Object(Ct.a)(Dt.a.mark(function e(t){var n,a;return Dt.a.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.authenticatedFetch(t);case 2:if(!(n=e.sent).ok){e.next=8;break}return e.next=6,n.json();case 6:return a=e.sent,e.abrupt("return",a);case 8:return e.next=10,Lt(n);case 10:throw e.sent;case 11:case"end":return e.stop()}},e,this)}));return function(t){return e.apply(this,arguments)}}()},{key:"authenticate",value:function(){var e=Object(Ct.a)(Dt.a.mark(function e(t,n){var a,i,r;return Dt.a.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,fetch("".concat(this._baseUrl,"/accounts/auth"),{method:"post",body:JSON.stringify({email:t,password:n})});case 2:if(!(a=e.sent).ok){e.next=9;break}return e.next=6,a.json();case 6:return i=e.sent,z.setSession(i),e.abrupt("return");case 9:return r={},e.prev=10,e.next=13,a.json();case 13:r=e.sent,e.next=19;break;case 16:e.prev=16,e.t0=e.catch(10),console.warn("Error while trying to deserialize the error response body: "+e.t0);case 19:if(!r.message&&!r.userMessage){e.next=21;break}throw new Nt(r.message,r.userMessage);case 21:throw new Nt("The /accounts/auth API responded with status code ".concat(a.status),!0);case 22:case"end":return e.stop()}},e,this,[[10,16]])}));return function(t,n){return e.apply(this,arguments)}}()},{key:"fetch",value:function(e){function t(t,n){return e.apply(this,arguments)}return t.toString=function(){return e.toString()},t}(function(){var e=Object(Ct.a)(Dt.a.mark(function e(t,n){var a,i;return Dt.a.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return a=0===t.indexOf("http")?t:this._baseUrl+t,e.next=3,fetch(a,n);case 3:return i=e.sent,e.abrupt("return",i);case 5:case"end":return e.stop()}},e,this)}));return function(t,n){return e.apply(this,arguments)}}())},{key:"fetchAndAssertOk",value:function(){var t=Object(Ct.a)(Dt.a.mark(function t(n,a){var i;return Dt.a.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,e.fetch(n,a);case 2:if((i=t.sent).ok){t.next=7;break}return t.next=6,Lt(i);case 6:throw t.sent;case 7:return t.abrupt("return",i);case 8:case"end":return t.stop()}},t,this)}));return function(e,n){return t.apply(this,arguments)}}()},{key:"getCurrentUser",value:function(){var t=Object(Ct.a)(Dt.a.mark(function t(){var n,a,i,r;return Dt.a.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return n=z.getSessionOrNavigateToLogin(),a=n.accountId,i=n.userId,t.next=3,e.authenticatedGetJson("/accounts/".concat(a,"/admin/users/").concat(i));case 3:return r=t.sent,t.abrupt("return",r);case 5:case"end":return t.stop()}},t,this)}));return function(){return t.apply(this,arguments)}}()},{key:"getJson",value:function(){var e=Object(Ct.a)(Dt.a.mark(function e(t){var n,a;return Dt.a.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.fetchAndAssertOk(t);case 2:return n=e.sent,e.next=5,n.json();case 5:return a=e.sent,e.abrupt("return",a);case 7:case"end":return e.stop()}},e,this)}));return function(t){return e.apply(this,arguments)}}()},{key:"getUser",value:function(){var t=Object(Ct.a)(Dt.a.mark(function t(n){var a,i,r;return Dt.a.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return a=z.getSessionOrNavigateToLogin(),i=a.accountId,t.next=3,e.authenticatedGetJson("/accounts/".concat(i,"/admin/users/").concat(n));case 3:return r=t.sent,t.abrupt("return",r);case 5:case"end":return t.stop()}},t,this)}));return function(e){return t.apply(this,arguments)}}()},{key:"_baseUrl",get:function(){return this._cachedBaseUrl||(this._cachedBaseUrl=I.a.isStaging()?"https://api-staging.vuplex.com":"https://api.vuplex.com"),this._cachedBaseUrl}}]),e}();Mt._cachedBaseUrl=null;var Ft=["January","February","March","April","May","June","July","August","September","October","November","December"],zt=(n(413),function(e){function t(){return Object(w.a)(this,t),Object(v.a)(this,Object(g.a)(t).apply(this,arguments))}return Object(y.a)(t,e),Object(f.a)(t,[{key:"render",value:function(){var e=this.props.release;return i.a.createElement("div",{className:"release-view"},i.a.createElement("h2",{id:e.version},i.a.createElement("strong",null,e.version),i.a.createElement("time",{dateTime:e.dateTime},function(e,t){"string"===typeof e&&(e=new Date(e));var n=Ft[e.getUTCMonth()];return t&&t.abbreviateMonth&&(n=n.slice(0,3)),"".concat(n," ").concat(e.getUTCDate(),", ").concat(e.getUTCFullYear())}(e.dateTime))),i.a.createElement("hr",null),i.a.createElement(Vt.a,{className:"release-notes",source:e.releaseNotesMarkdown}))}}]),t}(a.Component)),jt=(n(415),function(e){function t(){var e,n;Object(w.a)(this,t);for(var a=arguments.length,i=new Array(a),r=0;r<a;r++)i[r]=arguments[r];return(n=Object(v.a)(this,(e=Object(g.a)(t)).call.apply(e,[this].concat(i)))).state={releases:[]},n}return Object(y.a)(t,e),Object(f.a)(t,[{key:"componentDidMount",value:function(){var e=Object(Ct.a)(Dt.a.mark(function e(){var t;return Dt.a.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return s.a.pageview("/webview/releases"),e.next=3,Mt.getJson("/products/webview/releases");case 3:t=e.sent,this.setState({releases:t});case 5:case"end":return e.stop()}},e,this)}));return function(){return e.apply(this,arguments)}}()},{key:"render",value:function(){return i.a.createElement("div",{className:"page releases-page"},i.a.createElement(Ie.a,null,i.a.createElement("title",null,"Releases | 3D WebView"),i.a.createElement("meta",{name:"description",content:"Release notes for 3D WebView"})),i.a.createElement("h1",null,"3D WebView Release Notes"),this._renderContent())}},{key:"_renderContent",value:function(){return this.state.releases.length?i.a.createElement("div",null,this.state.releases.map(function(e){return i.a.createElement(zt,{key:e.version,release:e})})):i.a.createElement("div",{className:"spinner-container"},i.a.createElement(Ot,{className:"spinner"}))}}]),t}(a.Component)),Gt=n(433),_t=function(e){function t(){return Object(w.a)(this,t),Object(v.a)(this,Object(g.a)(t).apply(this,arguments))}return Object(y.a)(t,e),Object(f.a)(t,[{key:"componentDidUpdate",value:function(e){this.props.location!==e.location&&window.scrollTo(0,0)}},{key:"render",value:function(){return null}}]),t}(a.Component),Ht=Object(Gt.a)(_t),Bt=(n(418),function(e){function t(){return Object(w.a)(this,t),Object(v.a)(this,Object(g.a)(t).apply(this,arguments))}return Object(y.a)(t,e),Object(f.a)(t,[{key:"componentDidMount",value:function(){s.a.pageview("/webview/troubleshooting")}},{key:"render",value:function(){return i.a.createElement("div",{className:"page troubleshooting-page"},i.a.createElement(Ie.a,null,i.a.createElement("title",null,"Troubleshooting | 3D WebView"),i.a.createElement("meta",{name:"description",content:"Tips on troubleshooting Vuplex 3D WebView for Unity."})),i.a.createElement("h1",null,"Troubleshooting"),i.a.createElement("p",null,"Things aren't working as expected? Or not finding an API you need? Please try the following tips:"),i.a.createElement("ul",null,i.a.createElement("li",null,i.a.createElement("a",{href:"https://support.vuplex.com/search"},"Use the support search page")," to search all of 3D WebView's documentation and support articles (FAQ)."),i.a.createElement("li",null,"Use ",i.a.createElement("a",{href:"https://support.vuplex.com/articles/how-to-debug-web-content"},"remote debugging")," or ",i.a.createElement(ve,{to:"/webview/WebViewPrefab#LogConsoleMessages"},"JavaScript console logging")," to debug web content."),i.a.createElement("li",null,"If something's not working in your scene, please test with one of 3D WebView's demo scenes or example projects for comparison:",i.a.createElement("ul",null,i.a.createElement("li",null,"Demo scenes in Assets/Vuplex/WebView/Demos (like SimpleWebViewDemo and CanvasWebViewDemo)"),i.a.createElement("li",null,i.a.createElement("a",{href:"https://github.com/vuplex/oculus-webview-example"},"Oculus example")," (Quest, Rift)"),i.a.createElement("li",null,i.a.createElement("a",{href:"https://github.com/vuplex/xrit-webview-example"},"XR Interaction Toolkit example")),i.a.createElement("li",null,i.a.createElement("a",{href:"https://github.com/vuplex/hololens-webview-example"},"Hololens example")),i.a.createElement("li",null,i.a.createElement("a",{href:"https://github.com/vuplex/ar-foundation-webview-example"},"AR Foundation example")),i.a.createElement("li",null,i.a.createElement("a",{href:"https://github.com/vuplex/google-vr-webview-example"},"Cardboard example"))),"If the issue also occurs when running the demo scene, then it may be due to a project setting or that the 3D WebView installation has become corrupted. To isolate the issue, please create a new Unity project with a clean 3D WebView installation for comparison."),i.a.createElement("li",null,"JavaScript is 3D WebView's \"Swiss Army knife\". If a C# method doesn't exist for the goal you're trying to accomplish, it's likely that you can achieve it with JavaScript browser APIs using ",i.a.createElement(ve,{to:"/webview/IWebView#ExecuteJavaScript"},"ExecuteJavaScript()"),", ",i.a.createElement(ve,{to:"/webview/IWebView#PageLoadScripts"},"PageLoadScripts"),", and ",i.a.createElement("a",{href:"https://support.vuplex.com/articles/how-to-send-messages-from-javascript-to-c-sharp"},"JS-to-C# message passing"),"."),i.a.createElement("li",null,"Tried the tips above and are still encountering issues? Sorry about that! Please ",i.a.createElement("a",{href:"https://support.vuplex.com/contact"},"contact me"),".")))}}]),t}(a.Component)),Yt=(n(420),function(){return i.a.createElement(W.a,{to:"/webview/overview"})}),Jt=function(e){return function(t){function n(){return Object(w.a)(this,n),Object(v.a)(this,Object(g.a)(n).apply(this,arguments))}return Object(y.a)(n,t),Object(f.a)(n,[{key:"componentDidMount",value:function(){location.href=e}},{key:"render",value:function(){return null}}]),n}(a.Component)},Kt=Ae.reduce(function(e,t){var n=t.additionalInterfaces;if(n){var a=!0,i=!1,r=void 0;try{for(var o,s=n[Symbol.iterator]();!(a=(o=s.next()).done);a=!0){e[o.value]=!0}}catch(l){i=!0,r=l}finally{try{a||null==s.return||s.return()}finally{if(i)throw r}}}return e},{}),qt=Object.keys(Kt);qt.sort();var Qt=function(e){function t(){var e,n;Object(w.a)(this,t);for(var a=arguments.length,r=new Array(a),o=0;o<a;o++)r[o]=arguments[o];return(n=Object(v.a)(this,(e=Object(g.a)(t)).call.apply(e,[this].concat(r)))).state={mobileSidebarOpen:!1},n._handleMenuClick=function(){return n.setState({mobileSidebarOpen:!n.state.mobileSidebarOpen})},n._handleSidebarLinkClick=function(){n.state.mobileSidebarOpen&&n.setState({mobileSidebarOpen:!1})},n._renderFileReference=function(e){return i.a.createElement("li",{key:e.name},i.a.createElement(V.a,{to:"/webview/".concat(e.name),onClick:n._handleSidebarLinkClick},e.name))},n._renderFileReferenceRoute=function(e){return i.a.createElement(E.a,{key:e.name,exact:!0,path:"/webview/".concat(e.name),render:function(t){return i.a.createElement(St,Object.assign({fileReferenceDefinitions:Ae},t,e))}})},n}return Object(y.a)(t,e),Object(f.a)(t,[{key:"render",value:function(){var e=Ae.filter(function(e){return"platform"===e.sidebarSection});return i.a.createElement("div",{className:"app"},i.a.createElement(Ht,null),i.a.createElement(Se,null),i.a.createElement(G,{siteName:"developers",className:"developers-navbar",mobileMenuButton:{onClick:this._handleMenuClick,menuOpen:this.state.mobileSidebarOpen},search:!0,centerLinks:[i.a.createElement("a",{key:"store",href:"https://store.vuplex.com"},"store"),i.a.createElement("a",{key:"support",href:"https://support.vuplex.com"},"support"),i.a.createElement("a",{key:"blog",href:"https://blog.vuplex.com"},"blog")]}),i.a.createElement("div",{className:"app-container"},i.a.createElement(_,{mobileSidebarOpen:this.state.mobileSidebarOpen,onMobileBackdropClick:this._handleMenuClick},i.a.createElement(V.a,{to:"/webview/overview",onClick:this._handleSidebarLinkClick},"Overview"),i.a.createElement(V.a,{to:"/webview/getting-started",onClick:this._handleSidebarLinkClick},"Getting started"),i.a.createElement("a",{href:"https://support.vuplex.com",onClick:this._handleSidebarLinkClick},"Support articles / FAQ"),i.a.createElement(V.a,{to:"/webview/troubleshooting",onClick:this._handleSidebarLinkClick},"Troubleshooting"),i.a.createElement(V.a,{to:"/webview/releases",onClick:this._handleSidebarLinkClick},"Release notes"),i.a.createElement("div",null,i.a.createElement("h2",null,"API reference:"),i.a.createElement("ul",{className:"file-section-list"},i.a.createElement("li",null,i.a.createElement("h3",null,"Core:"),i.a.createElement("ul",null,i.a.createElement("li",null,i.a.createElement(V.a,{to:"/webview/IWebView",onClick:this._handleSidebarLinkClick},"IWebView")),i.a.createElement("li",null,i.a.createElement(V.a,{to:"/webview/WebViewPrefab",onClick:this._handleSidebarLinkClick},"WebViewPrefab")),i.a.createElement("li",null,i.a.createElement(V.a,{to:"/webview/CanvasWebViewPrefab",onClick:this._handleSidebarLinkClick},"CanvasWebViewPrefab")),i.a.createElement("li",null,i.a.createElement(V.a,{to:"/webview/Web",onClick:this._handleSidebarLinkClick},"Web (static methods)")),i.a.createElement("li",null,i.a.createElement(V.a,{to:"/webview/Keyboard",onClick:this._handleSidebarLinkClick},"Keyboard")),i.a.createElement("li",null,i.a.createElement(V.a,{to:"/webview/CanvasKeyboard",onClick:this._handleSidebarLinkClick},"CanvasKeyboard")),i.a.createElement("li",null,i.a.createElement(V.a,{to:"/webview/additional-interfaces",onClick:this._handleSidebarLinkClick},"Advanced features")))),i.a.createElement("li",null,i.a.createElement("h3",null,"Platform-specific:"),i.a.createElement("ul",null,e.map(this._renderFileReference))))),i.a.createElement("a",{href:"https://vuplex.com/contact",className:"mobile-only",onClick:this._handleSidebarLinkClick},"Contact")),i.a.createElement("div",{className:"page-container"},i.a.createElement(A.a,null,i.a.createElement(E.a,{exact:!0,path:"/",component:Yt}),i.a.createElement(E.a,{exact:!0,path:"/webview",component:Yt}),i.a.createElement(E.a,{exact:!0,path:"/webview/additional-interfaces",render:function(e){return i.a.createElement(ke,Object.assign({additionalInterfaceNames:qt},e))}}),i.a.createElement(E.a,{exact:!0,path:"/webview/getting-started",component:yt}),i.a.createElement(E.a,{exact:!0,path:"/webview/overview",component:gt}),i.a.createElement(E.a,{exact:!0,path:"/webview/troubleshooting",component:Bt}),i.a.createElement(E.a,{exact:!0,path:"/webview/releases",component:jt}),Ae.filter(function(e){return!e.externalLinkUrl}).map(this._renderFileReferenceRoute),i.a.createElement(E.a,{exact:!0,path:"/commercial-library-license",component:Jt("https://support.vuplex.com/articles/commercial-library-license")}),i.a.createElement(E.a,{exact:!0,path:"/contact",component:Jt("https://support.vuplex.com/contact")}),i.a.createElement(E.a,{exact:!0,path:"/support",component:Jt("https://support.vuplex.com/contact")}),i.a.createElement(E.a,{exact:!0,path:"/webview/android-comparison",component:Jt("https://support.vuplex.com/articles/android-comparison")})))))}}]),t}(a.Component);Boolean("localhost"===window.location.hostname||"[::1]"===window.location.hostname||window.location.hostname.match(/^127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/));n(422),n(424);s.a.initialize("UA-115535860-5");var Zt=i.a.createElement(o.a,null,i.a.createElement(Qt,null));Object(r.render)(Zt,document.getElementById("root")),c.a.polyfill(),p.a.registerLanguage("javascript",m.a),p.a.registerLanguage("cs",b.a),p.a.initHighlightingOnLoad(),p.a.configure({languages:["javascript","cs"]}),"serviceWorker"in navigator&&navigator.serviceWorker.ready.then(function(e){e.unregister()})},44:function(e,t,n){e.exports=n.p+"static/media/caret.bf829718.svg"},45:function(e,t,n){e.exports=n.p+"static/media/windows.fcc2f76f.svg"},56:function(e,t,n){"use strict";var a;!function(e){e.Staging="staging",e.Prod="prod"}(a||(a={})),t.a=a},57:function(e,t,n){e.exports=n.p+"static/media/vuplex-logo.4253cfce.png"},58:function(e,t,n){e.exports=n.p+"static/media/search.160b1499.svg"},59:function(e,t,n){e.exports=n.p+"static/media/account.5ac4a16a.svg"},62:function(e,t,n){e.exports=n.p+"static/media/csa.06a280c8.svg"},63:function(e,t,n){e.exports=n.p+"static/media/emulate3d.3bfb6a69.png"},64:function(e,t,n){e.exports=n.p+"static/media/glue.41f81294.png"},65:function(e,t,n){e.exports=n.p+"static/media/proputt.0d7e34c4.png"},66:function(e,t,n){e.exports=n.p+"static/media/nasa.80115d2c.svg"},67:function(e,t,n){e.exports=n.p+"static/media/saxo.36229a61.svg"},68:function(e,t,n){e.exports=n.p+"static/media/synergy.35fb0526.png"},69:function(e,t,n){e.exports=n.p+"static/media/uga.b98f16fa.png"},70:function(e,t,n){e.exports=n.p+"static/media/viveport.1a29ac42.png"},71:function(e,t,n){e.exports=n.p+"static/media/vmware.6226e22f.png"},72:function(e,t){e.exports=""},73:function(e,t,n){e.exports=n.p+"static/media/android.d05a88e5.svg"},74:function(e,t,n){e.exports=n.p+"static/media/apple.e7ce957f.svg"},75:function(e,t,n){e.exports=n.p+"static/media/html5.9636ea5f.svg"},76:function(e,t,n){e.exports=n.p+"static/media/webview-demo.0cf690a9.mp4"},78:function(e,t,n){e.exports=n(428)}},[[78,2,1]]]);